AGB  ·  Datenschutz  ·  Impressum  







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

DLL wird nicht geladen - Warum nicht???

Ein Thema von delphifan2004 · begonnen am 19. Aug 2005 · letzter Beitrag vom 21. Aug 2005
Antwort Antwort
Seite 1 von 3  1 23      
delphifan2004

Registriert seit: 26. Nov 2004
Ort: Dresden
274 Beiträge
 
Delphi 10.3 Rio
 
#1

DLL wird nicht geladen - Warum nicht???

  Alt 19. Aug 2005, 15:21
Hallo!

Vor einiger Zeit habe ich hier eine Frage zu Interfaces gepostet. Als Antwort erhielt ich u.a. folgenden Link:

http://www.delphipraxis.net/internal...=405336#405336

Im folgenden Code wird die DLL, die ein Plugin enthält, das mit Interfaces arbeitet, nicht geladen. Kennt jemand den Grund dafür?

Delphi-Quellcode:
procedure TForm1.mCfgToolsClick(Sender: TObject);
type
  TProcInitPlg = function: IPlugin; stdcall;
var
  fName: string;
  iPlg: IPlugin;
  aProc: TProcInitPlg;
  hDLL: HWND;
  fProc: TFarProc;
  mApp: TApp;
begin
 ShowMessage(GetCurrentDir); //hab die .dll extra dahin kopiert!

 with TOpenDialog.Create(nil) do begin
    if Execute then
      fName := FileName
    else begin ShowMessage('Datei existiert nicht!'); Exit; end;
  end;
  (*
  fName := GetCurrentDir;
  if fName[Length(fName)]<>'\' then fName := fName + '\';
  fName := fName + 'plugin.dll';
  *)

  hDll := LoadLibrary(@fName[1]);
  fProc := GetProcAddress(hDLL,'InitPlugin');
  if fProc <> nil then begin
    @aProc := fProc;
  end else begin ShowMessage('DLL konnte nicht geladen werden!'); Exit; end;
  iPlg := aProc;
  showMessage(iPlg.GetName);
  iPlg := nil;
  FreeLibrary(hDLL);
 end;
Oder ist es die Prozedur, die er nicht findet? Wenn ich die Unit ShareMem als ertes in meiner Formular Unit aufführe, erhalte ich ein Meldungsfenster mit dem Titel "Fehler beim Starten des Programms" und der Meldung "Die Datei Delphimm.dll ist verknüpft mit dem fehlenden Export-BORLNDMM.DLL-DunpBlocks". Was hat das zu bedeuten? Der Code für die Dll ist exakt der gleiche, wie in dem Thread, der oben als Link angegeben ist.

Schon mal Danke im Voraus für Eure Hilfe sagt

Delphifan2004
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#2

Re: DLL wird nicht geladen - Warum nicht???

  Alt 19. Aug 2005, 15:52
Zitat von delphifan2004:
Wenn ich die Unit ShareMem als ertes in meiner Formular Unit aufführe, [..]
Hab mich mit deinem Problem nicht beschäftigt, aber dort ist definitiv die falsche Position.
Delphi-Quellcode:
program Project1;

uses
  ShareMem,
  Forms,
  Unit1 in 'Unit1.pas{Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
Delphi-Quellcode:
library Project2;

uses
  ShareMem,
  SysUtils,
  Classes;

{$R *.res}

begin
end.
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#3

Re: DLL wird nicht geladen - Warum nicht???

  Alt 19. Aug 2005, 15:54
Zitat von delphifan2004:
Kennt jemand den Grund dafür?
Vielleicht weil das Gras grün ist?

Zitat von delphifan2004:
Oder ist es die Prozedur, die er nicht findet?
Weiß nicht, exporitert die DLL die Funktion denn?

Schreib den Code mal so um:
Delphi-Quellcode:
  SetLastError(0);
  hDll := LoadLibrary(@fName[1]);
  if hDll = 0 then
    ShowMessage(IntToStr(GetLastError));
und teile mit, ob, und wenn ja was für ein Fehlercode kommt.
  Mit Zitat antworten Zitat
delphifan2004

Registriert seit: 26. Nov 2004
Ort: Dresden
274 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: DLL wird nicht geladen - Warum nicht???

  Alt 19. Aug 2005, 17:22
Hallo tommie-lie!

Habe mit GetLastError den Fehlercode abgefragt, wie Du vorgeschlagen hast. Ich erhalte Fehlercode 31. Da ich keinen Fehlertext dazu habe (In meiner D3 Pro Hilfe steht nix dazu) kann ich damit momentan nix anfangen!

Wo gibt es Erläuterungen zu den Fehlercodes?

Gruß

Delphifan2004
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: DLL wird nicht geladen - Warum nicht???

  Alt 19. Aug 2005, 17:25
Probiers mal damit:
ShowMessage(SysErrorMessage(GetLastError));
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
delphifan2004

Registriert seit: 26. Nov 2004
Ort: Dresden
274 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: DLL wird nicht geladen - Warum nicht???

  Alt 19. Aug 2005, 17:51
Hallo Bernhard ...!

Danke erst mal für den Tipp mit SysErrorMessage(). Damit erhalte ich die Meldung:

"Ein an das System angeschlossenes Gerät funktioniert nicht"

Frage ist: Welches?

Ich tippe auf ein Problem mit der Stringübergabe, weil:

wenn ich die Unit ShareMem in der Projektdatei und/oder in der Form-Unit einbinde, erhalte ich

das Meldungsfenster mit dem Titel

"Fehler beim Starten des Programms"

und der Meldung

"Die Datei Delphimm.dll ist verknüpft mit dem fehlenden Export-BORLNDMM.DLL-DunpBlocks".

Was hat das zu bedeuten?

Außerdem erscheint ein Meldungsfenster mit dem Namen meiner Anwendung als Titel und der Meldung

"Vorgang kann nicht erzeugt werden"

Um auf obigen Text für SysErrorMessage(GetLastError) zurückzukommen, welches Gerät soll denn sonst für das Funktionieren meiner Anwendung so entscheidend sein.

Da ich mit ShareMem Probleme habe, tippe ich darauf, das das die Ursache ist. Bloß, warum lädt er dann meine Dll nicht? Eher müßte ich doch wegen fehlender ShareMem ne Exception kriegen, wenn ich Strings übergeben will, wozu ja ShareMem gebraucht wird.

Irgendwas stimmt hier nicht. Bloß Was!?!?

verzweifelte Grüße

Delphifan2004
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#7

Re: DLL wird nicht geladen - Warum nicht???

  Alt 19. Aug 2005, 17:58
Pfff, solche Fehlercodes kennt man auswendig! Die Fehlercodes sind in einem aktuellen PSDK enthalten, oder alternativ online im MSDN.
31 ist ERROR_GEN_FAILURE und heißt laut PSDK, daß eine Device nicht funktioniert. Ich hatte eigentlich eher auf 2 (file not found) oder 32 (sharing violation) gehofft. Mit 31 kann ich nicht viel anfangen, du könntest es mal mit einer anderen DLL probieren, die nichts mit Interfaces und sonstigem zu tun hat, einfach nur eine exportierte Funktion die zum Beispiel 'ne Messagebox anzeigt.


Nachtrag (ja, diesmal funktionierte der rote Kasten mal!):
"Gerät" heißt nicht ein Ding, das du anfassen kannst und irgendwo einstöpselst, es kann auch eine Datei sein.
Und was machst du überhaupt mit der ShareMem? Willst du Pascal-Strings oder -Objekte an Funktionen der DLL übergeben? Ich dachte um das zu vermeiden willst du Interfaces verwenden?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: DLL wird nicht geladen - Warum nicht???

  Alt 19. Aug 2005, 18:00
ShowMessage(GetCurrentDir); //hab die .dll extra dahin kopiert! Aha. Und wer sagt dir, dass das aktuelle Verzeichnis auch das ist, wo du deine DLL hinkopiert hast?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#9

Re: DLL wird nicht geladen - Warum nicht???

  Alt 19. Aug 2005, 18:03
Zitat von Luckie:
Aha. Und wer sagt dir, dass das aktuelle Verzeichnis auch das ist, wo du deine DLL hinkopiert hast?
Er lädt die Datei anhand eines OpenDialog, er wird sie wohl richtig ausgewählt haben, nehme ich an. Deswegen hätte mit Fehlercode 2 auch irritiert, aber damit könnte ich wenigstens was anfangen
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: DLL wird nicht geladen - Warum nicht???

  Alt 19. Aug 2005, 18:15
Hm, OK.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
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 21:07 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