libPNG als x64 compilieren
-
Hey,
ich würd gern die libPNG in einem meiner Pascal Projekte benutzen, aber leider gibt es die DLL nur als 32bit Kompilat, aber der Source is auch vorhanden. Also wollte ich mir die DLL schnell als 64bit DLL kompilieren. Ich hab alles mit VS 2010 geöffnet und ein paar kleinere Fehler beseitigt, sodass er kompiliert. Dann hab ich in den Projekteigenschaften mit dem Konfigurationsmanager auf x64 umgestellt und erneut kompiliert. Die DLL die ich dabei erhalten habe wollte ich nun in meinem Pascal Projekt dynamisch laden, doch die Funktion gibt mir eine 0 als Handle zurück, heißt die DLL ist ungültig (also noch 32bit). Die DLL ist auch im Win32_RELEASE Ordner gelandet. Muss ich da noch irgendwo was extra einstellen, das er mir die DLL mit 64bit kompiliert?
MfG & Thx Bergmann.
-
Und was hat das mit MFC zu tun ?
?
-
...und was sagt GetLastError?
-
Hey,
@Redhat: sry, ich wusste nich wohin damit, ich bin relativ selten hier unterwegs...
@Martin Richter: in dem Pascal Projekt liefert GetLastError 193 zurück: ERROR_BAD_EXE_FORMAT - is not a valid Win32 application.MfG Bergmann
-
Na dan ist Dein Pascal Projekt 32bit und eben nicht 64bit.
-
Nein, mein Pascal Project ist definitiv 64bit. Ich hab den 64bit Kompiler eingestellt und die EXE wird auch im Taskmanager nicht als 32bit Programm gekennzeichnet. Warum der Fehlercode aber Win32 Anwendung sagt weiß ich nicht, der wird mir so von der Funktion zurück gegeben...
€: OK ich habs him bekommen. Zumindest läd er die DLL jetzt ohne Fehler. Aber wenn ich ne Prozeduradresse aus der DLL mit GetProcAdress laden will, dann findet er die nicht. GetLastError sagt Fehler 126 "The specified module could not be found." Aber die Prozedur ist im VS Projekt vorhanden und wurde auch für den export in die DLL vermerkt.
MfG Bergmann.
-
Dann schau mit Depends hinein wie der Export wirklich heißt.
Evtl. ist ein Unterstrich davor.Wenn Du eine DEF Datei anlegst bekommst Du es auch hin, dass der weg ist.
-
Hey,
in der DLL stehen die Namen so, wie sie auch im Code stehen (ohne _). Und genau so hatte ich sie auch bei an GetProcAdress übergeben.
Die DEF-Datei hab ich auch. Ich hab auch versucht die Prozedur über ihre Ordinal Nummer zu laden, aber das geht leider auch nicht.€: OK, habs gelöst. Die Funktionen sind beim FreePascalCompiler falsch definiert. Da wurde anstatt eines Integer-Zeigers ein unsigned Integer für das Handle der DLL benutzt. Danke für die Hilfe
MfG Bergmann.