Jump to content


This is a ready-only archive of the InstallSite Forum. You cannot post any new content here. / Dies ist ein Archiv des InstallSite Forums. Hier können keine neuen Beiträge veröffentlicht werden.
Photo

Welche Sprache hat Windows wirklich?


1 reply to this topic

EberhardH

EberhardH
  • Members
  • 137 posts

Posted 11 March 2002 - 11:02

Hallo,

da IS bei GetSystemInfo(LANGUAGE, ...) lediglich die lokale Spracheinstellung (regional settings) zurückgibt und nicht die wirkliche Sprache des Betriebssystems, habe ich versucht, das Beispiel der AcroReader-Installation, hier auf InstallSite zu finden, nachzuvollziehen.

Unter IS 5.5 läuft das perfekt, unter 6.31 stürzt das gleiche Code-Fragment ab:

 UseDLL(SUPPORTDIR ^"LangVerInfo.DLL");
  szUserDllLocation = WINSYSDIR ^"user32.dll";
  nDec = LangVerInfo.GetFileLangID(szUserDllLocation);
 UnUseDLL(SUPPORTDIR ^"LangVerInfo.DLL");

Deklariert habe ich das (wie im Bsp. angegeben), mit
prototype SHORT LangVerInfo.GetFileLangID(STRING);
wobei der Compiler anstelle von "STRING" ein "BYREF STRING" haben will. Die DLL ist unter SUPPORTDIR wirklich vorhanden.

Fehlermeldung: Dll function call resulted in bad stack. Possible incorrect prototyping: LangVerInfo.GetFileLangID. Setup will now terminate.

Hat jemand einen Tip, wieso das unter 6.31 nicht geht, unter 5.5 aber problemlos? Was muß für 6.31 geändert werden? Oder kann man einfacher an die wirkliche Sprache des Betriebssystems kommen?

Gruß
Eberhard

EberhardH

EberhardH
  • Members
  • 137 posts

Posted 11 March 2002 - 13:56

Hallo,

HEUREKA!, habe soeben selbst die Lösung gefunden: man muß hier bei der Deklarierung noch die Aufrufkonvention für die DLL benennen!!

Standardmäßig nimmt IS 6 "stdcall" als Aufruf-Modus an, wenn man nichts deklariert. Ich habe stattdessen "cdecl" genommen - und siehe da, alles funktionierte!

Das sieht dann also so aus:
    prototype cdecl SHORT LangVerInfo.GetFileLangID(BYREF STRING);  

anstelle von:
    prototype SHORT LangVerInfo.GetFileLangID(BYREF STRING);


Eberhard  
:)