函数调用出问题!来看看!(50分)

  • 主题发起人 主题发起人 taozhiyu
  • 开始时间 开始时间
T

taozhiyu

Unregistered / Unconfirmed
GUEST, unregistred user!
单元中定义
const
ENGLISH = (SUBLANG_ENGLISH_US shl 10) or LANG_ENGLISH;
CHINESE = (SUBLANG_CHINESE_SIMPLIFIED shl 10) or LANG_CHINESE;

分别调用函数
LoadNewResourceModule(CHINESE);
LoadNewResourceModule(ENGLISH);
第一个能成功,第二个不能成功。为什么?函数定义如下!
附注:我调试了一下,不成功的原因是NewInst为零,所以没有返回值。
FileName的返回值正常,为exe的文件名


function LoadNewResourceModule(Locale: LCID): Longint;
var
FileName: array [0..260] of char;
P: PChar;
LocaleName: array[0..4] of Char;
NewInst: Longint;
begin
GetModuleFileName(HInstance, FileName, SizeOf(FileName));
GetLocaleInfo(Locale, LOCALE_SABBREVLANGNAME, LocaleName, SizeOf(LocaleName));
P := PChar(@FileName) + lstrlen(FileName);
while (P^ <> '.') and (P <> @FileName) do Dec(P);
NewInst := 0;
Result := 0;
if P <> @FileName then
begin
Inc(P);
if LocaleName[0] <> #0 then
begin
// Then look for a potential language/country translation
lstrcpy(P, LocaleName);
NewInst := LoadLibraryEx(FileName, 0, LOAD_LIBRARY_AS_DATAFILE);
if NewInst = 0 then
begin
// Finally look for a language only translation
LocaleName[2] := #0;
lstrcpy(P, LocaleName);
NewInst := LoadLibraryEx(FileName, 0, LOAD_LIBRARY_AS_DATAFILE);
end;
end;
end;
if NewInst <> 0 then
Result := SetResourceHInstance(NewInst);
end;
 
function SetResourceHInstance(NewInstance: Longint): Longint;
var
CurModule: PLibModule;
begin
CurModule := LibModuleList;
Result := 0;
while CurModule <> nil do
begin
if CurModule.Instance = HInstance then
begin
if CurModule.ResInstance <> CurModule.Instance then
FreeLibrary(CurModule.ResInstance);
CurModule.ResInstance := NewInstance;
Result := NewInstance;
Exit;
end;
CurModule := CurModule.Next;
end;
end;
 
卷卷问function SetResourceHInstance(NewInstance: Longint): Longint;
,不过我觉得出错的时候根本没有调用到他啊!不关这个函数的事情吧!
 
说说你的目的。
 
多国语言问题!
 
我想其中调用到的函数大家都很清楚把!为什么会有问题?一个通过一个不通过?
 
编辑器有没有什么错误信息?
 
没有任何编译错误!通过了!你要知道CHINESE的调用成功了!!!!
 
调用顺序改为:
LoadNewResourceModule(ENGLISH);
LoadNewResourceModule(CHINESE);
看看是不是照样是第二个不能成功?
 
不是出错!!编译没有任何错误。

问题在调用函数后,result应该是个不等于零的数字!!!

用CHINESE调用,就返回了一个5位数

用ENGLISH调用就返回0

为什么!
 
我在WIN ME +D5下调用,没有问题!
 
卷卷,告诉我你的NewInst, 如果不等于零的话就肯定可以了!!!
 
换了顺序也没用!呵呵!很奇特的调试方法!不过我TRY过了,FAIL~~~ :<
 
偶的返回值全部=0!

:(
 
用参数ENGLISH的时候NewInst的值应该是不等于零的。

可是我这里等于零!!!为什么?

CHINESE都成功了
 
taozhiyu兄总是很看得起我,总是邀我看贴,
我却一个都回答不了,不由得愧对左边的专家分,
好像也还算个有钱人,唉,实在抱歉,我确实是不懂。
我已经修改了我的自我介绍,我的delphi水平仅限
自娱自乐,呵呵,以后不敢说大话了。
 
嘿嘿!没什么啦!能来就好
 
不会是程序本身的问题了;
ENGLISH = (SUBLANG_ENGLISH_US shl 10) or LANG_ENGLISH;确保无误?
 
WINDOWS.PAS 里面定义的系统常量,你可以到这个单元里面查看!我不知道D5里面有没有

不过D6的单元里面有。我COPY过来的!(怕手抽筋 :~~~ )
 
这是多国语言中用来实时切换语言的。用LoadNewResourceModule掉入新的语言资源模块。
调入CHINESE的都成功了。就是ENGLISH的不行啊!我不知道为什么了!
 
后退
顶部