Wie rufen Sie EnumSystemLocales in Delphi auf?

8

Ich versuche, EnumSystemLocales in Delphi. Zum Beispiel:

%Vor%

Das Problem ist, dass der Rückruf nur einmal aufgerufen wird.

Hinweis: EnumSystemLocales ist und gibt "true" zurück, was auf Erfolg hinweist.

Die Anmerkungen von EnumSystemLocales besagt, dass mein Callback true zurückgeben muss, damit die Enumeration fortgesetzt wird (oder korrekterweise nicht false zurückgegeben werden muss):

  

Die Funktion zählt Gebietsschemas auf, indem Gebietsschemakennzeichen übergeben werden, eins um   eine Zeit, zu der angegebenen anwendungsdefinierten Callback-Funktion. Dies   wird fortgesetzt, bis alle installierten oder unterstützten Gebietsschema-IDs vorhanden sind   wurden an die Callback-Funktion oder die Callback-Funktion übergeben   gibt FALSE zurück.

Auf der Dokumentation der Callback-Funktion :

%Vor%

Ein Kommentator ist auf ein Problem mit der Definition von "nicht falsch" gestoßen:

  

Diese Funktion muss 1, nicht (DWORD) -1 zurückgeben, um die Verarbeitung fortzusetzen

Das lässt mich an Delphis Definition von

denken %Vor%

unterscheidet sich von Windows. (Deshalb habe ich einen Rückgabewert von BOOL(1) versucht - der immer noch fehlschlägt).

Als nächstes frage ich mich, ob es nicht einmal stdcall sein soll.

Wie kann man in Delpi vorschlagen, EnumSystemLocales ?

zu nennen?

Bearbeiten : Auch versucht:

  • Result := BOOL(-1);
  • Result := BOOL($FFFFFFFF);
  • Result := BOOL(1);
  • Result := True;
Ian Boyd 23.12.2011, 15:13
quelle

3 Antworten

8

versuchen Sie, die Funktion LocalesCallback wie folgt zu deklarieren

%Vor%

überprüfen Sie dieses Beispiel

%Vor%     
RRUZ 23.12.2011, 15:29
quelle
3

Dieses Problem tritt aufgrund des in Windows Version 5.1 festgestellten WinAPI-Fehlers auf Die WinNls EnumXXX-Funktionsfamilie (und laut den Kommentaren wahrscheinlich mehrere andere) erkennt nur (BOOL)1 als (BOOL)TRUE und beendet die Aufzählung, wenn der Callback eine andere returnValue != (BOOL)FALSE zurückgibt.

Hier ist eine semantische Problemumgehung, die ich herausgefunden habe:

%Vor%     
OnTheFly 23.12.2011 17:42
quelle
2

Wenn Sie darauf bestehen, BOOL type für das Ergebnis der Callback-Funktion zu verwenden, verwenden Sie Folgendes:

%Vor%

weil Bool(1) = $FFFFFFFF .

    
kludg 23.12.2011 15:43
quelle