Я пытаюсь позвонить EnumSystemLocales
в Delphi. Например:
{ 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.
В документации функции обратного вызова :
BOOL CALLBACK EnumLocalesProc(
__in LPTSTR lpLocaleString
);
у комментатора возникла проблема с определением «не ложно»:
Эта функция должна возвращать 1, а не (DWORD) -1, чтобы продолжить обработку
Это заставляет меня думать, что определение Дельфи
True: BOOL;
отличается от окна. (Вот почему я попытался вернуть значение BOOL(1)
- что все еще не удается).
Дальше мне интересно, а не должно ли оно быть stdcall
.
В любом случае, может кто-нибудь подсказать, как в Дельпи звонить EnumSystemLocales
?
Редактировать : Также пробовал:
Result := BOOL(-1);
Result := BOOL($FFFFFFFF);
Result := BOOL(1);
Result := True;