Entwickler-Ecke
Windows API - LoadLibrary unter 64bit
Bergmann89 - Do 17.11.11 15:55
Titel: LoadLibrary unter 64bit
Hey,
ich entwickle zur Zeit mit FPC ein 64bit Projekt. Und da ist mir beim laden einer DLL aufgefallen, das die LoadLibrary bei FPC höchstwarscheinlich falsch definiert sind. Dort wird von der Funktion ein Cardinal zurück gegeben. Ungefähr so: function LoadLibrary(lpFileName: pAnsiChar): Cardinal; stdcall; external Kernel32 'kernel32.dll' 'LoadLibraryA'; Denauso wird bei GetProcAdress ein Cardinal als Handle erwartet. Unter 32bit funktioniert das auch alles wunderbar, aber bei 64bit bekommt man von GetProcAdress nur 0en zurück. Das Handle der DLL sollte eig. ein PInteger sein, dann arbeitet das unter 64bit auch so wie es soll.
Jetzt haben Martok und ich uns gefragt wie denn das bei den Delphi-Versionen aussieht, die 64bit können? Ist das da auch noch ein Cardinal oder wurde da schon auf PInteger umgestellt?
MfG Bergmann.
Delphi-Laie - Do 17.11.11 20:18
Bergmann89 hat folgendes geschrieben : |
Jetzt haben Martok und ich uns gefragt wie denn das bei den Delphi-Versionen aussieht, die 64bit können? |
Allzuviele kommen dafür nicht infrage: Ich kenne nur eine, die da XE2 tituliert wird.
Bergmann89 hat folgendes geschrieben : |
Ist das da auch noch ein Cardinal oder wurde da schon auf PInteger umgestellt? |
Liegen Dir die Quelltexte der Units vor? Ich könnte sonst mal nachschauen, falls gewünscht. Ansonsten wäre doch ein SizeOf() evlt. hilfreich. In meinem Programm "Prozesse" (das Du noch kennen müßtest) wird das THandle bei Loadlibrary jedenfalls anstandslos auch mit 64 Bit compiliert, und Loadlibrary funktioniert.
jaenicke - Do 17.11.11 22:13
Bergmann89 hat folgendes geschrieben : |
Jetzt haben Martok und ich uns gefragt wie denn das bei den Delphi-Versionen aussieht, die 64bit können? Ist das da auch noch ein Cardinal oder wurde da schon auf PInteger umgestellt? |
Natürlich ist das in XE2 unter 64-Bit kein 32-Bit Wert mehr:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| function LoadLibrary(lpLibFileName: PWideChar): HMODULE; stdcall; {$EXTERNALSYM LoadLibrary} function LoadLibraryA(lpLibFileName: PAnsiChar): HMODULE; stdcall; {$EXTERNALSYM LoadLibraryA} function LoadLibraryW(lpLibFileName: PWideChar): HMODULE; stdcall;
THandle = NativeUInt; HINST = THandle; HMODULE = HINST; |
Bergmann89 - Fr 18.11.11 00:54
Ah, OK. Gut zu wissen, dann werd ich wohl morgen mal nen Bugreport an FPC abschicken, aber jetzt geh ich erstma penn^^ gn8
Delphi-Laie - Fr 18.11.11 01:02
Bergmann89 hat folgendes geschrieben : |
Ah, OK. Gut zu wissen, dann werd ich wohl morgen mal nen Bugreport an FPC abschicken, aber jetzt geh ich erstma penn^^ gn8 |
Du erkundigtest Dich doch nach 64-Bit-Delphi?!
Also, der Loadlibrary-Aufruf funktioniert bei mir sowohl beim FPC-/Lazarus- als auch beim Delphi-Compilat mit 64 Bit.
Bergmann89 - Fr 18.11.11 13:04
Les dir mein Post nochma richtig durch. LoadLibrary funktioniert auch unter 64bit. GetProcAdress liefert falsche Werte (bei FPC/Lazarus)!
Delphi-Laie - Fr 18.11.11 14:25
Bergmann89 hat folgendes geschrieben : |
GetProcAdress liefert falsche Werte (bei FPC/Lazarus)! |
Im FPC- oder im Delphimodus?
Also, im FPC-Modus scheint es fehlerfrei bei mir zu funktionieren. Extra wegen Deiner nun auch noch mein Windows 7 (64 Bit) hochgefahren...mit geringen Änderungen (dreimal "Pointer" und einmal ein "@" entfernt) kann ich mein Programm "Prozesse" auch im Delphimodus kompilieren, und das Compilat funktioniert genauso wie das mit bzw. in dem FPC-Modus erstellte.
Bergmann89 - Fr 18.11.11 17:27
Hey,
läuft im Delphi Mode. Ich hab allerdings nur das 2.4.4 Release von FPC. Wenn du die aktuelle Version aus dem Repository hast, dann geht es ohne Probleme, weil der Bug schon gefixt wurde. Hatte ich vorhin im Bugreport nachgelesen.
MfG Bergmann.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!