AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DLL bei 64Bit-System wird nicht geladen

Ein Thema von khm8 · begonnen am 25. Mär 2014 · letzter Beitrag vom 3. Apr 2014
Antwort Antwort
Seite 1 von 2  1 2      
khm8

Registriert seit: 25. Mär 2014
6 Beiträge
 
#1

DLL bei 64Bit-System wird nicht geladen

  Alt 25. Mär 2014, 13:16
Delphi-Version: 7
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:
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;
An dem Programm wurde sonst nichts geändert. Es soll halt jetzt nur statt der 32Bit-DLL die 64Bit-DLL geladen werden.
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.

Geändert von khm8 (25. Mär 2014 um 13:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: DLL bei 64Bit-System wird nicht geladen

  Alt 25. Mär 2014, 13:19
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.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
khm8

Registriert seit: 25. Mär 2014
6 Beiträge
 
#3

AW: DLL bei 64Bit-System wird nicht geladen

  Alt 25. Mär 2014, 13:42
Vielen Dank für die schnelle Antwort
  Mit Zitat antworten Zitat
khm8

Registriert seit: 25. Mär 2014
6 Beiträge
 
#4

AW: DLL bei 64Bit-System wird nicht geladen

  Alt 25. Mär 2014, 13:54
Typischer Anfängerfehler = > Crosspost!

Hab die Frage hier auch noch gestellt:

http://forum.delphi-treff.de/index.p...431#post439431
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#5

AW: DLL bei 64Bit-System wird nicht geladen

  Alt 25. Mär 2014, 14:44
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;
  ...
  • Und, wie bereits genannt, erstellt Delphi 7 ausschließlich Win32-Programme.
  • Win32-Programme können nur Win32-DLLs laden.
  • Aber ein Win32-Programm kann auch in einem Win64 ausgeführt werden. (dort genauer im WoW64 "Windows-on-Windows", welches das 32-Bit-Subsystem vom 64-Bit-Windows ist)
  • Wenn unbedingt eine 64-Bit-DLL nötig ist, z.B. weil die 32-Bit-DLL im Windows 64 den Treiber nicht ansprechen kann,
    dann muß dafür auch ein Win64-Programm erstellt werden. (neues Delphi mit Win64-Unterstützung oder Alternativen ala Lazarus)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (25. Mär 2014 um 14:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: DLL bei 64Bit-System wird nicht geladen

  Alt 25. Mär 2014, 15:50
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.
Ich würde keinesfalls den Pfad weg lassen! Genau diese "such doch mal überall ob du eine DLL mit dem Namen findest" ist doch ein Problemquelle die man nur schwer findet. Vor allem da MS denkt mit jeder Windows-Version die Logik der Suche zu ändern und diese fehlenden Pfadangaben schon für Sicherheitslücken (http://www.heise.de/newsticker/meldu...r-1204286.html) gesorgt haben.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#7

AW: DLL bei 64Bit-System wird nicht geladen

  Alt 25. Mär 2014, 16:11
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?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (25. Mär 2014 um 16:16 Uhr)
  Mit Zitat antworten Zitat
khm8

Registriert seit: 25. Mär 2014
6 Beiträge
 
#8

AW: DLL bei 64Bit-System wird nicht geladen

  Alt 27. Mär 2014, 15:31
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.
Miniaturansicht angehängter Grafiken
fehlermeldung-delphi.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#9

AW: DLL bei 64Bit-System wird nicht geladen

  Alt 27. Mär 2014, 16:12
Und wie hast du das Programm kompiliert bzw. für welche Plattform? Win32 oder Win64? Das ist der entscheidende Faktor.

MfG Dalai
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#10

AW: DLL bei 64Bit-System wird nicht geladen

  Alt 27. Mär 2014, 16:51
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz