loadlibrary unter W10
Hallo,
ich muß eine Fremd-DLL unter WIN10 Pro 64Bit per loadLibrary einbinden. Die DLL wird als 32 Bit und 64 Bit Version zur Verfügung gestellt. Mit lastError erhalte ich entweder error = 193 (bad EXE format) oder error = 126 (not found). Die DLL ist vorhanden, das habe ich mit FileExists vorher geprüft und ich verwende loadLibrary(PChar( DLL-NAME )). Ich vermute die DLL benötigt andere DLLs und wird daher nicht geladen. Per HEX-Editor sehe ich (u.a.) MSVCP100.DLL. Als Test versuche ich mit loadLibrary MSVCP100.DLL einzeln zu laden. Das klapp aber auch nicht. Gibt es ein spezielle Version von MSVCP100 für 64 Bit? Ich bin aus den gefundenen Infos nicht schlau geworden. Auf meimem PC finde ich diese DLL nur unter C:\windows\system32, auch nachdem ich eine (angeblich) für 64 gedachet Version nachinstalliert habe. |
AW: loadlibrary unter W10
Ich glaube das Tool das einem anzeigen konnte was beim Einladen einer DLL falsch läuft hieß "Dependency Walker". Das würde ich mal auf die 32 und 64-Bit-Version loslassen und schauen was der ausspuckt.
|
AW: loadlibrary unter W10
.. danke, hab ich schon gemacht. Das Drama dauert schon 4 Tage und ich habe die Details erstmal weggelassen.
Im D.Walker sehe ich auch MSVCP100.DLL. ich verstehe nur nicht, warum ich diese DLL mit LoadLibrary auch nicht laden kann. |
AW: loadlibrary unter W10
Zitat:
|
AW: loadlibrary unter W10
hab ich gemacht, s.o. aber auf meimem PC finde ich diese DLL nur unter C:\windows\system32
|
AW: loadlibrary unter W10
Zitat:
Für welche Plattform kompilierst du dein Programm? Win32 oder Win64 (oder beide)? Wo genau liegt die zu ladende DLL? Für den Fall, dass sie im %SystemRoot%\system32 liegt, und du ein Win32-Programm hast: Bist du dir der Filesystem Redirection bewusst, die dann zuschlägt (durch WOW64)? Und nicht zuletzt: Etwas Code kann vielleicht auch nicht schaden. Grüße Dalai |
AW: loadlibrary unter W10
Hallo,
Zitat:
Ich würde erst mal ein Testprogramm aufsetzen, wo die fremde Dll im eigenen Verzeichnis liegt. Dort wird zuerst gesucht. |
AW: loadlibrary unter W10
Liste der Anhänge anzeigen (Anzahl: 1)
ist schon klar, ich wollte erstmal "klein anfangen"
Code:
Dei beiden DLLs liegen in zwei Verzeichnissen DLL32 bzw DLL64. Das komplette Projekt ist als ZIP angehängt.
unit Load_DLL_Test;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TfrmTest = class(TForm) Memo1: TMemo; bt32: TButton; bt64: TButton; procedure FormActivate(Sender: TObject); procedure bt32Click(Sender: TObject); procedure bt64Click(Sender: TObject); private public { Public-Deklarationen } end; var frmTest: TfrmTest; implementation {$R *.dfm} procedure TfrmTest.FormActivate(Sender: TObject); begin memo1.Lines.Clear; memo1.Lines.Add('loadLibrary Test; Version vom 13.12.2019 '); memo1.Lines.Add('ADDIPACK DLLs (32/64 bit) müssen in '); memo1.Lines.Add('zwei Verzeichnissen ..\DLL32 bzw. ..\DLL64 liegen'); end; procedure TfrmTest.bt32Click(Sender: TObject); var strName, strHome: string; err : integer; hndl : THandle; begin memo1.Lines.Add(''); hndl := 0; strHome := ExtractFilePath(Application.ExeName); strName := strHome + 'DLL32\ADDIDATA.DLL'; if FileExists(strName) then memo1.Lines.Add('file ' + strName +' exists') else showMessage('DLL 64 bit not found'); hndl := loadLibrary(PCHAR(strName)); err := GetLastError(); memo1.Lines.Add('32 bit ' + IntToStr(hndl) + ' last error ' + intToStr(err)); end; procedure TfrmTest.bt64Click(Sender: TObject); var strName, strHome : string; err : integer; hndl : THandle; begin memo1.Lines.Add(''); hndl := 0; strHome := ExtractFilePath(Application.ExeName); strName := strHome + 'DLL64\ADDIDATA.DLL'; if FileExists(strName) then memo1.Lines.Add('file ' + strName +' exists') else showMessage('DLL 64 bit not found'); hndl := loadLibrary(PCHAR(strName)); err := GetLastError(); memo1.Lines.Add('64 bit ' + IntToStr(hndl) + ' last error ' + intToStr(err)); end; end. Ich arbeite für WIN10 64bit mit Delphi 6, ja ich weiß das ist alt ... |
AW: loadlibrary unter W10
Zitat:
Wenn die DLL dann noch nicht funktioniert, ist das Problem ein anderes. Zitat:
DLL erzeugt mit modernem Delphi und du arbeitest mit einem alten. Das Problem hatte ich umgekehrt schon. |
AW: loadlibrary unter W10
Mit Delphi 6 Programmen kannst Du keine 64-Bit-DLL laden.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:50 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