![]() |
Übersetzung von GetSystemDefaultLocaleName von C nach Delphi
Hi,
kann mir mal jemand bei der Übersetzung der Funktion ![]()
Delphi-Quellcode:
Wo hab ich Mist gemacht?
function GetSystemLocaleName : string;
var po :TFarProc; DLLWnd :THandle; localeString : LPWStr; GetSystemDefaultLocaleName : function( var lpLocaleName : LPWStr; cchLocaleName : integer) : integer; stdcall; begin Result := ''; DLLWnd := LoadLibrary('kernel32'); if DLLWnd > 0 then begin try po := GetProcAddress(DLLWnd, 'GetSystemDefaultLocaleName'); if po <> nil then begin @GetSystemDefaultLocaleName := po; if GetSystemDefaultLocaleName(localeString, LOCALE_NAME_MAX_LENGTH) > 0 then Begin Result := localeString; End; end; finally FreeLibrary(DLLWnd); end; end; end; Ich sollte öfters mal wieder was mit Delphi machen, ist alles total eingerostet :wall: :wall: |
Re: Übersetzung von GetSystemDefaultLocaleName von C nach De
Moin André,
probier mal, ob das hier klappt:
Delphi-Quellcode:
function GetSystemLocaleName : string;
var po :TFarProc; DLLWnd :THandle; localeString : LPWStr; GetSystemDefaultLocaleName : function( const lpLocaleName : LPWStr; cchLocaleName : integer) : integer; stdcall; begin Result := ''; DLLWnd := LoadLibrary('kernel32'); if DLLWnd > 0 then begin try po := GetProcAddress(DLLWnd, 'GetSystemDefaultLocaleName'); if po <> nil then begin @GetSystemDefaultLocaleName := po; localeString := AllocMem(LOCALE_NAME_MAX_LENGTH); try if GetSystemDefaultLocaleName(localeString, LOCALE_NAME_MAX_LENGTH) > 0 then Begin Result := localeString; End; finally end; end; finally FreeLibrary(DLLWnd); end; end; end; |
Re: Übersetzung von GetSystemDefaultLocaleName von C nach De
Perfekt! Das AllocMem hab ich vergessen :wall: :wall:
Danke dir vielmals :hello: :thumb: |
Re: Übersetzung von GetSystemDefaultLocaleName von C nach De
Moin André,
ich hab' noch etwas anderes geändert ;-) |
Re: Übersetzung von GetSystemDefaultLocaleName von C nach De
ja und das const :oops: :stupid:
aber es löst nicht mein Problem. Ich krieg trotzdem nicht die Betriebssystemsprache, sondern nur die Sprache die ich in der Systemsteuerung auswähle. ich brauch aber en-US auf einem US amerikanischen Windows mit deutschen Tastatur und Ländereinstellungen :? |
Re: Übersetzung von GetSystemDefaultLocaleName von C nach De
Moin André,
und was ist mit ![]() (kann's mangels installiertem Vista leider nicht testen) BTW: um noch mal kurz auf das const zu kommen: Das ist einer der Gründe, warum ich die delphispezifische Deklaration von API-Funktionen mit var nicht mag. Nimmt man var, kann man die Beispiele nicht so nutzen wie vorgegeben, und ist auch eingeschränkt was man übergibt (nil geht z.B. nicht). |
Re: Übersetzung von GetSystemDefaultLocaleName von C nach De
Das var ist hier auch noch vollkommen falsch. Es wuerde bedeuten das ein Zeiger auf einen PWideChar uebergeben wird. Es soll aber direkt ein PWideChar uebergeben werden, naemlich der Zeiger auf den Beginn des Puffers in dem der String abgelegt wird.
|
Re: Übersetzung von GetSystemDefaultLocaleName von C nach De
Delphi-Quellcode:
Ich habe mal nachgeschaut, bei meinem XP / SP1 gibt es keine Funktion "GetSystemDefaultLocaleName"
function GetSystemLocaleName : string;
var DLLWnd :THandle; localeString : LPWStr; GetSystemDefaultLocaleName : function(const lpLocaleName : LPWStr; cchLocaleName : integer): integer; stdcall; begin Result := ''; DLLWnd := LoadLibrary(kernel32); // <-<< als constante und nicht als String if DLLWnd > 0 then // ala 'kernel32' sondern denn dann begin // LoadLibrary('kernel32.dll') try @GetSystemDefaultLocaleName := GetProcAddress(DLLWnd, 'GetSystemDefaultLocaleName'); if @GetSystemDefaultLocaleName <> nil then begin localeString := AllocMem(1024); if GetSystemDefaultLocaleName(localeString, 1024) > 0 then Begin Result := string(localeString); // <-<< localeString ist doch ein End; // PWideChar also Unicode... *grübel* end else MessageBox(Application.Handle, 'Failed to perform GetSystemDefaultLocaleName.', PChar(Application.Title), MB_ICONERROR or MB_OK); finally FreeLibrary(DLLWnd); end; end; end; in der Kernel32. :gruebel: |
Re: Übersetzung von GetSystemDefaultLocaleName von C nach De
Zitat:
Zitat:
Zitat:
|
Re: Übersetzung von GetSystemDefaultLocaleName von C nach De
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz