Как вызвать EnumSystemLocales в Delphi?

Я пытаюсь вызвать 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;

9
задан Ian Boyd 24 December 2011 в 04:11
поделиться