Я пытаюсь вызвать 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
- это , возвращающее истину, что указывает на успех.
В примечаниях к EnumSystemLocales
говорится, что мой обратный вызов должен возвращать true для продолжения перечисления (или, точнее, не должен возвращать false для продолжения перечисления):
Функция перечисляет языковые стандарты, передавая идентификаторы языковых стандартов, один в время указанной функции обратного вызова, определяемой приложением.Этот продолжается до тех пор, пока все установленные или поддерживаемые идентификаторы локали были переданы функции обратного вызова или функции обратного вызова возвращает ЛОЖЬ.
В документации функции обратного вызова :
BOOL CALLBACK EnumLocalesProc(
__in LPTSTR lpLocaleString
);
комментатор обнаружил проблему с определением «не ложно»:
Эта функция должна возвращать 1, а не (DWORD) - 1 для продолжения обработки
Это заставляет меня думать, что определение
True: BOOL;
в delphi отличается от определения Window. (Вот почему я попытался вернуть значение BOOL (1)
- но все равно не удалось).
Затем я задаюсь вопросом, не должно ли это быть stdcall
.
В любом случае, может кто-нибудь подсказать, как в Delpi вызвать EnumSystemLocales
?
Изменить : Также пробовали:
Результат: = BOOL (-1);
Результат: = BOOL ($ FFFFFFFF);
Результат: = BOOL (1);
Результат: = True;