我正在尝试在Delphi中调用EnumSystemLocales
。例如:
{ Called for each supported locale. }
function LocalesCallback(Name: PChar): BOOL; stdcall;
begin
OutputDebugString(Name);
Result := Bool(1); //True
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
EnumSystemLocales(@LocalesCallback, LCID_SUPPORTED);
end;
问题在于回调函数只被调用了一次。
注意:EnumSystemLocales返回true,表示成功。
EnumSystemLocales的备注说明我的回调函数必须返回true以继续枚举(更准确地说,不能返回false以继续枚举):
该函数通过将区域设置标识符逐个传递给指定的应用程序定义的回调函数来枚举区域设置。这将继续,直到所有已安装或支持的区域设置标识符都已传递到回调函数,或者回调函数返回FALSE为止。
关于回调函数的文档,请参见documentation of the callback function。
BOOL CALLBACK EnumLocalesProc(
__in LPTSTR lpLocaleString
);
一个评论者遇到了“非假”的定义问题:
这让我想起了Delphi对于“非假”的定义。该函数必须返回1,而不是(DWORD)-1才能继续处理
True: BOOL;
我尝试了一个返回值为BOOL(1)
的方法,但仍然失败,这是因为它与Windows的不同。
接下来,我想知道它是否应该是stdcall
。
无论如何,有人能建议一下,在Delphi中如何调用EnumSystemLocales
吗?
编辑:还尝试了以下方法:
Result := BOOL(-1);
Result := BOOL($FFFFFFFF);
Result := BOOL(1);
Result := True;