我正在尝试打电话EnumSystemLocales http://msdn.microsoft.com/en-us/library/windows/desktop/dd317828%28v=vs.85%29.aspx在德尔福。例如: http://www.podgoretsky.com/ftp/Docs/Delphi/D5/dg/intapps.html
{ 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;
问题是回调只被调用一次。
Note: EnumSystemLocales
is返回true,表示成功。
的言论EnumSystemLocales
说我的回调必须返回true继续枚举(或更正确地说,不得返回false继续枚举):
该函数通过传递区域设置标识符来枚举区域设置,其中一个位于
一次,到指定的应用程序定义的回调函数。这
继续,直到所有已安装或支持的区域设置标识符
已传递给回调函数或回调函数
返回 FALSE。
On the 回调函数的文档 http://msdn.microsoft.com/en-us/library/windows/desktop/dd317822%28v=vs.85%29.aspx:
BOOL CALLBACK EnumLocalesProc(
__in LPTSTR lpLocaleString
);
评论者遇到了“不假”定义的问题:
该函数必须返回 1,而不是 (DWORD) -1 才能继续处理
这让我觉得delphi的定义
True: BOOL;
与Windows不同。 (这就是为什么我尝试返回值BOOL(1)
- 仍然失败)。
接下来我想知道它是否不应该是stdcall
.
不管怎样,有人可以建议如何在 Delpi 中调用EnumSystemLocales
?
Edit: 还尝试过:
Result := BOOL(-1);
Result := BOOL($FFFFFFFF);
Result := BOOL(1);
Result := True;