AGB  ·  Datenschutz  ·  Impressum  







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

loadlibrary unter W10

Ein Thema von joacim · begonnen am 13. Dez 2019 · letzter Beitrag vom 19. Dez 2019
Antwort Antwort
Seite 1 von 3  1 23      
joacim

Registriert seit: 30. Apr 2003
Ort: Immenrode
60 Beiträge
 
Delphi 6 Professional
 
#1

loadlibrary unter W10

  Alt 13. Dez 2019, 16:27
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.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: loadlibrary unter W10

  Alt 13. Dez 2019, 16:33
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.
  Mit Zitat antworten Zitat
joacim

Registriert seit: 30. Apr 2003
Ort: Immenrode
60 Beiträge
 
Delphi 6 Professional
 
#3

AW: loadlibrary unter W10

  Alt 13. Dez 2019, 16:39
.. 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.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#4

AW: loadlibrary unter W10

  Alt 13. Dez 2019, 16:48
Zitat:
Im D.Walker sehe ich auch MSVCP100.DLL. ich verstehe nur nicht, warum ich diese DLL mit LoadLibrary auch nicht laden kann.
Installier doch einfach das passende Microsoft Windows Redistributable Package dann musst du nix selber laden.
  Mit Zitat antworten Zitat
joacim

Registriert seit: 30. Apr 2003
Ort: Immenrode
60 Beiträge
 
Delphi 6 Professional
 
#5

AW: loadlibrary unter W10

  Alt 13. Dez 2019, 16:54
hab ich gemacht, s.o. aber auf meimem PC finde ich diese DLL nur unter C:\windows\system32
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

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

AW: loadlibrary unter W10

  Alt 13. Dez 2019, 16:57
[...] und ich habe die Details erstmal weggelassen.
Das solltest du ändern. Ohne konkrete Informationen kann jeder Helfer nur einen Schuss ins Blaue machen.

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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: loadlibrary unter W10

  Alt 13. Dez 2019, 17:00
Hallo,
Zitat:
Die DLL ist vorhanden, das habe ich mit FileExists vorher geprüft
Das nützt nichts. Der Vorgang des Suchens der Dll ist viel komplizierter.

Ich würde erst mal ein Testprogramm aufsetzen,
wo die fremde Dll im eigenen Verzeichnis liegt.
Dort wird zuerst gesucht.
Heiko
  Mit Zitat antworten Zitat
joacim

Registriert seit: 30. Apr 2003
Ort: Immenrode
60 Beiträge
 
Delphi 6 Professional
 
#8

AW: loadlibrary unter W10

  Alt 13. Dez 2019, 17:24
ist schon klar, ich wollte erstmal "klein anfangen"
Code:
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.
Dei beiden DLLs liegen in zwei Verzeichnissen DLL32 bzw DLL64. Das komplette Projekt ist als ZIP angehängt.
Ich arbeite für WIN10 64bit mit Delphi 6, ja ich weiß das ist alt ...
Angehängte Dateien
Dateityp: zip LOAD_dll_tEST.zip (347,4 KB, 14x aufgerufen)

Geändert von joacim (13. Dez 2019 um 17:27 Uhr)
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#9

AW: loadlibrary unter W10

  Alt 13. Dez 2019, 17:35
Zitat:
hab ich gemacht, s.o. aber auf meimem PC finde ich diese DLL nur unter C:\windows\system32
Das ist ja auch richtig so. Die DLL muss man nicht selber laden. Lass die einfach da und lade sie nicht manuell.

Wenn die DLL dann noch nicht funktioniert, ist das Problem ein anderes.

Zitat:
Ich arbeite für WIN10 64bit mit Delphi 6, ja ich weiß das ist alt ...
Das ist meiner Meinung nach schon das Problem.
DLL erzeugt mit modernem Delphi und du arbeitest mit einem alten. Das Problem hatte ich umgekehrt schon.
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#10

AW: loadlibrary unter W10

  Alt 13. Dez 2019, 17:46
Mit Delphi 6 Programmen kannst Du keine 64-Bit-DLL laden.
  Mit Zitat antworten Zitat
Alt 13. Dez 2019, 19:03     Erstellt von Frühlingsrolle
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Antwort Antwort
Seite 1 von 3  1 23      

 

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 14: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