![]() |
Delphi-Version: 7
DLL bei 64Bit-System wird nicht geladen
Hallo,
ich habe leider nicht viel Ahnung vom Programmieren, darf aber ein Programm von einem Kollegen übernehmen und soll es für Windows 7 64Bit umschreiben. Kurz zur Umgebung: Delphi 7 auf einer VMWare mit WIN7 64Bit Hier mal ein Code-Auszug:
Code:
An dem Programm wurde sonst nichts geändert. Es soll halt jetzt nur statt der 32Bit-DLL die 64Bit-DLL geladen werden.
function LoadIK220DLL(DLLName:String):Bool32;
var err:Boolean; begin try DLLName := PAnsiChar(ExtractFilePath(Application.ExeName)+DLLName); if FileExists(DLLName) then begin ShowMessage('Mich gibt es'); ShowMessage(DLLName); SetLastError(0); DLLHandle := LoadLibrary(Pchar(DLLName)); if DLLHandle = 0 then ShowMessage(SysErrorMessage(GetLastError)); end else begin ShowMessage('Datei IK220DLL64.dll gibt es nicht!'); DLLHandle := 0; exit; end; Aber der DLLHandle gibt immer 0 zurück und die mir nichts sagende Fehlermeldung ist: "%1 ist keine zulässige Win32-Anwendung" Die gleiche Meldung kommt übrigens auch, wenn ich das Programm unter XP laufen lassen will und die 64Bit-DLL geladen werden soll. Nehme ich die alte 32Bit-DLL geht es (auch bei Win7). Hat jemand eine Idee, woran das liegen kann? Vielen Dank schon einmal für eure Hilfe. |
AW: DLL bei 64Bit-System wird nicht geladen
Hallo,
Du kannst mit einem 32-Bit Programm keine 64-Bit DLLs laden. Dafür brauchst du ein 64-Bit Programm. Aber das kannst du mit Delphi 7 nicht erzeugen. |
AW: DLL bei 64Bit-System wird nicht geladen
Vielen Dank für die schnelle Antwort :thumb:
|
AW: DLL bei 64Bit-System wird nicht geladen
Typischer Anfängerfehler = > Crosspost!
Hab die Frage hier auch noch gestellt: ![]() |
AW: DLL bei 64Bit-System wird nicht geladen
Was macht eigentlich das PAnsiChar da in dem Code?
String => PChar AnsiString => PAnsiChar Muß die DLL "zwingend" us dem Programmverzeichnis geladen werden? Wenn nein, dann kann der Pfad weggelassen werden. LoadLibrary sucht sich die DLL schon von allein. Angefangen beim Programmpfad, bis zu den System-Verzeichnissen.
Delphi-Quellcode:
function LoadIK220DLL(DLLName: String): Bool32;
var err: Boolean; // wird das noch verwendet? (aber es fehlt ja eh der halbe Code) begin try if FileExists(DLLName) then begin ShowMessage('Mich gibt es: ' + DLLName); DLLHandle := LoadLibrary(PChar(DLLName)); if DLLHandle = 0 then RaiseLastOSError; // alt = RaiseLastWin32Error; end else begin //ShowMessage('Datei IK220DLL64.dll gibt es nicht!'); // Und wenn via DLLName ein anderer Dateiname übergeben wurde? ShowMessage('Datei ' + DLLName + ' gibt es nicht!'); DLLHandle := 0; Exit; // Schau mal bitte in die Compilermeldung und beheben die aufgezählten Fehlermeldungen (vorallem bezüglich Result sei nicht initialisiert) end; ...
|
AW: DLL bei 64Bit-System wird nicht geladen
Zitat:
![]() |
AW: DLL bei 64Bit-System wird nicht geladen
Wobei es bisher immer so war, daß zuerst im Programmpfad gesucht wird.
Was sich in letzter Zeit verändert hat, ist, daß System-DLLs (k.A. wie diese spezifiziert sind) nicht mehr in den Programm- und Suchpfaden gesucht werden. Womit "böse" Hooks/Trojaner/Viren/usw nicht einfach diese DLLs/Funktionen austauschen können, indem sie irgendwo eine gleichnamige DLL ablegen. Via SxS müsste man aber dennoch regeln können, welche DLL-Version verwendet werden soll, wenn man Windows die Suche überlässt. Wie leicht ist es eigentlich einen manipulierten Netzwerkpfad zu erstellen? |
AW: DLL bei 64Bit-System wird nicht geladen
Liste der Anhänge anzeigen (Anzahl: 1)
So, habe mir Delphi XE5 als 30 Tage-Testversion runtergeladen und installiert.
Hab den Code wie oben angepasst und dann kommt beim Laden der DLL folgende Meldung: siehe angehängte Datei Also im Prinzip wieder fast die gleiche Fehlermeldung wie unter Delphi 7. |
AW: DLL bei 64Bit-System wird nicht geladen
Und wie hast du das Programm kompiliert bzw. für welche Plattform? Win32 oder Win64? Das ist der entscheidende Faktor.
MfG Dalai |
AW: DLL bei 64Bit-System wird nicht geladen
Standardmäßig ist das Projekt ja noch 32 Bit und auch eine neue VCL-Anwendung wird erstmal nur für 32 Bit eingerichtet.
In der Projektverwaltung, bei Plattform muß also erstmal das Win64 hinzugefügt und natürlich auch aktiviert werden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz