Autor Beitrag
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Do 17.11.11 15:55 
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; stdcallexternal 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.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Do 17.11.11 20:18 
user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
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.


Zuletzt bearbeitet von Delphi-Laie am Do 17.11.11 23:07, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 17.11.11 22:13 
user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
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:
ausblenden 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;

// Und HMODULE:
  THandle = NativeUInt;
  HINST = THandle;              { HINSTANCE from widnef.h }
  HMODULE = HINST;              { from windef.h }
Bergmann89 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: 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

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Fr 18.11.11 01:02 
user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: 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)!

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Fr 18.11.11 14:25 
user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: 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.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^