![]() |
DLL wird nicht geladen - Warum nicht???
Hallo!
Vor einiger Zeit habe ich hier eine Frage zu Interfaces gepostet. Als Antwort erhielt ich u.a. folgenden Link: ![]() 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:
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.
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; Schon mal Danke im Voraus für Eure Hilfe sagt Delphifan2004 |
Re: DLL wird nicht geladen - Warum nicht???
Zitat:
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. |
Re: DLL wird nicht geladen - Warum nicht???
Zitat:
Zitat:
Schreib den Code mal so um:
Delphi-Quellcode:
und teile mit, ob, und wenn ja was für ein Fehlercode kommt.
SetLastError(0);
hDll := LoadLibrary(@fName[1]); if hDll = 0 then ShowMessage(IntToStr(GetLastError)); |
Re: DLL wird nicht geladen - Warum nicht???
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 |
Re: DLL wird nicht geladen - Warum nicht???
Probiers mal damit:
Delphi-Quellcode:
ShowMessage(SysErrorMessage(GetLastError));
|
Re: DLL wird nicht geladen - Warum nicht???
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 |
Re: DLL wird nicht geladen - Warum nicht???
Pfff, solche Fehlercodes kennt man auswendig! :mrgreen: 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? |
Re: DLL wird nicht geladen - Warum nicht???
Delphi-Quellcode:
Aha. Und wer sagt dir, dass das aktuelle Verzeichnis auch das ist, wo du deine DLL hinkopiert hast?
ShowMessage(GetCurrentDir); //hab die .dll extra dahin kopiert!
|
Re: DLL wird nicht geladen - Warum nicht???
Zitat:
|
Re: DLL wird nicht geladen - Warum nicht???
Hm, OK.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz