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
joacim

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

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
 
#2

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
 
#3

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
hoika

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

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
 
#5

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
 
#6

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
 
#7

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
Benutzerbild von Dalai
Dalai

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

AW: loadlibrary unter W10

  Alt 13. Dez 2019, 19:17
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.
Das sollte kein Problem sein, jedenfalls nicht für LoadLibrary. DLLs sind ja gerade dafür da, von einem beliebigen Programm geladen und benutzt zu werden, völlig egal, womit die beteiligten Teile kompiliert wurden. Trotzdem ist dein Einwand grundsätzlich berechtigt, wenn es um Rückgaben von Funktionen aus der DLL geht (Stichwort Strings/PChar und Unicode). Aber das kommt erst nach dem LoadLibrary.

@joacim:
Den (relevanten) Fehlercode aus dem OP beschreibt MS so:
Zitat:
ERROR_MOD_NOT_FOUND
126 (0x7E)
The specified module could not be found.
Schau dir die DLL genauer an, z.B. mit einem der schon genannten Programme (Dependency Walker, DLL Export Viewer) und prüfe, welche Funktionen deine DLL aus anderen DLLs importiert. Bevor eine DLL erfolgreich geladen werden kann, müssen alle (statischen) Import-Abhängigkeiten aufgelöst werden. Und samso sagte ja schon richtig, dass du die Win64-Variante der DLL ignorieren kannst, denn dein Programm ist in jedem Fall 32-bittig.

Grüße
Dalai
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

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

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
Antwort Antwort

 

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 06:24 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