AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Übersetzung von GetSystemDefaultLocaleName von C nach Delphi

Übersetzung von GetSystemDefaultLocaleName von C nach Delphi

Ein Thema von MagicAndre1981 · begonnen am 28. Jul 2007 · letzter Beitrag vom 30. Jul 2007
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von MagicAndre1981
MagicAndre1981

Registriert seit: 4. Jun 2004
Ort: Nordhausen
2.214 Beiträge
 
Delphi 7 Enterprise
 
#1

Übersetzung von GetSystemDefaultLocaleName von C nach Delphi

  Alt 28. Jul 2007, 22:35
Hi,

kann mir mal jemand bei der Übersetzung der Funktion MSDN-Library durchsuchenGetSystemDefaultLocaleName helfen? Ich will die Funktion aus der kernell32.dll dynamisch laden. Das Handle ist auch größer 0 und mit GetProcAdress bekomme ich Adresse, aber wenn ich die Funktion dann aufrufe bekomme ich nur japanische/chinesische Zeichen

Delphi-Quellcode:
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;
Wo hab ich Mist gemacht?

Ich sollte öfters mal wieder was mit Delphi machen, ist alles total eingerostet
André
"A programmer is just a tool which converts caffeine into code", daran wirds wohl liegen, dass ich Abends nie pennen kann

Zitat von Luckie:
Nicht nur dass ihr offtopic geworden seid, jetzt werdet ihr selber im Offtopic noch offtopic
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.262 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Übersetzung von GetSystemDefaultLocaleName von C nach De

  Alt 28. Jul 2007, 22:44
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;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von MagicAndre1981
MagicAndre1981

Registriert seit: 4. Jun 2004
Ort: Nordhausen
2.214 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Übersetzung von GetSystemDefaultLocaleName von C nach De

  Alt 28. Jul 2007, 22:51
Perfekt! Das AllocMem hab ich vergessen

Danke dir vielmals
André
"A programmer is just a tool which converts caffeine into code", daran wirds wohl liegen, dass ich Abends nie pennen kann

Zitat von Luckie:
Nicht nur dass ihr offtopic geworden seid, jetzt werdet ihr selber im Offtopic noch offtopic
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.262 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Übersetzung von GetSystemDefaultLocaleName von C nach De

  Alt 28. Jul 2007, 23:10
Moin André,

ich hab' noch etwas anderes geändert
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von MagicAndre1981
MagicAndre1981

Registriert seit: 4. Jun 2004
Ort: Nordhausen
2.214 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Übersetzung von GetSystemDefaultLocaleName von C nach De

  Alt 28. Jul 2007, 23:18
ja und das const

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
André
"A programmer is just a tool which converts caffeine into code", daran wirds wohl liegen, dass ich Abends nie pennen kann

Zitat von Luckie:
Nicht nur dass ihr offtopic geworden seid, jetzt werdet ihr selber im Offtopic noch offtopic
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.262 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Übersetzung von GetSystemDefaultLocaleName von C nach De

  Alt 29. Jul 2007, 00:00
Moin André,

und was ist mit MSDN-Library durchsuchenGetLocaleInfoEx?

(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).
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#7

Re: Übersetzung von GetSystemDefaultLocaleName von C nach De

  Alt 29. Jul 2007, 06:16
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.
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#8

Re: Übersetzung von GetSystemDefaultLocaleName von C nach De

  Alt 29. Jul 2007, 08:31
Delphi-Quellcode:
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;
Ich habe mal nachgeschaut, bei meinem XP / SP1 gibt es keine Funktion "GetSystemDefaultLocaleName"
in der Kernel32.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von MagicAndre1981
MagicAndre1981

Registriert seit: 4. Jun 2004
Ort: Nordhausen
2.214 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Übersetzung von GetSystemDefaultLocaleName von C nach De

  Alt 29. Jul 2007, 12:12
Zitat von turboPASCAL:
Ich habe mal nachgeschaut, bei meinem XP / SP1 gibt es keine Funktion "GetSystemDefaultLocaleName"
in der Kernel32.
die Funktion gibt es erst ab Vista.

Zitat von Robert Marquardt:
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.
Ja, das ist mir später auch aufgefallen. Danke für die Erklärung.

Zitat von Christian Seehase:
Moin André,

und was ist mit MSDN-Library durchsuchenGetLocaleInfoEx?

(kann's mangels installiertem Vista leider nicht testen)
Ok, ich schau mir das mal an.
André
"A programmer is just a tool which converts caffeine into code", daran wirds wohl liegen, dass ich Abends nie pennen kann

Zitat von Luckie:
Nicht nur dass ihr offtopic geworden seid, jetzt werdet ihr selber im Offtopic noch offtopic
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Übersetzung von GetSystemDefaultLocaleName von C nach De

  Alt 29. Jul 2007, 12:20
Hi,

ich glaube für Dein Problem brauchst Du die Funktion

MSDN-Library durchsuchenGetUserDefaultUILanguage

Schönen Sonntag
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf