sto provando a chiamare EnumSystemLocales
in Delfi. For example:Come chiamare EnumSystemLocales in 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;
Il problema è che il callback viene solo richiamato una volta.
Nota:EnumSystemLocales
è restituendo vero, il successo indica.
Le osservazioni di EnumSystemLocales
dice che la mia callback deve restituire vero continuare enumerazione (o più correttamente, non deve restituire falso continuare enumerazione):
La funzione enumera locali passando identificatori di impostazioni internazionali , uno a un orario, alla funzione di callback definita dall'applicazione specificata. Questo continua finché non sono stati passati tutti gli identificatori internazionali installati o supportati alla funzione di richiamata o la funzione di richiamata restituisce FALSE.
Sul documentation of the callback function:
BOOL CALLBACK EnumLocalesProc(
__in LPTSTR lpLocaleString
);
un commentatore ha incontrato un problema con la definizione di "non false":
Questa funzione deve restituire 1, non (DWORD) - 1 per continuare l'elaborazione
Questo mi fa pensare che la definizione delphi di
True: BOOL;
è diverso da quello di Windows. (Ecco perché ho provato un valore di ritorno di BOOL(1)
- che non riesce ancora).
Successivamente mi chiedo se non è nemmeno supposto essere stdcall
.
In entrambi i casi, qualcuno può suggerire come, in Delpi, chiamare EnumSystemLocales
?
Edit: cercato anche:
Result := BOOL(-1);
Result := BOOL($FFFFFFFF);
Result := BOOL(1);
Result := True;
Il problema sembra essere concentrata sul modo di scrivere la funzione di callback, piuttosto che chiamare EnumSystemLocales. Ho ragione? – menjaraz
versione di Windows? – OnTheFly
@menjaraz Molto bene potrebbe essere - ma non voglio scartare alcuna possibilità. –