Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi DLL-Problem (https://www.delphipraxis.net/1324-dll-problem.html)

CalganX 14. Nov 2002 18:53


DLL-Problem
 
Hi,
ich bin derzeit dabei ein einigermaßen ordentliches Plugin-System zu programmieren. Dazu sucht der User mit Hilfe eines OpenDialogs die DLL aus. Dann wird mit dem folgenden Code die DLL geladen und die Installationsprozedur ausgeführt und der DLL-Pfad wird in eine XML-Datei geschrieben, damit sie beim nächsten Starten auch wieder geladen wird...

Hier der SourceCode:
Delphi-Quellcode:
procedure TForm1.Installieren1Click(Sender: TObject);
var
  InstFunc: TInstall;
  InstFuncPtr: TFarProc;
  DLLHandle: THandle;
  PlgXML: IXMLDOMDocument2;
  Plgs: IXMLDOMNode;
  Plg: IXMLDOMNode;
  PlgPath: IXMLDOMNode;
begin
  if OpenDialog2.Execute then begin
    DLLHandle := LoadLibrary(PChar(OpenDialog1.FileName));
    InstFuncPtr := GetProcAdress(DLLHandle,'install');
    if FuncPtr <> nil then begin
      @InstFunc := FuncPtr;

      if InstFunc then begin
        MessageDlg('Plugin-Installation erfolgreich', mtInformation, [mbOK], 0);
        PlgXML := CoDOMDocument40.Create;
        PlgXML.setProperty('NewParser', True);
        PlgXML.load(ExtractFileName(Application.ExeName)+'plugins.xml');
        if PlgXML.parseError.errorCode <> 0 then
        begin
          ShowMessage('XML Fehler: '#13#10 + PlgXML.parseError.reason);
          Exit;
        end;
        Plgs := PlgXML.documentElement;

        Plg := PlgXML.createElement('plugin');
        PlgPath := PlgXML.createElement('path');
        PlgPath.text := OpenDialog2.FileName;
        Plg.appendChild(PlgPath);

        Plgs.appendChild(Plg);

        PlgXml.save(ExtractFileName(Application.ExeName)+'plugins.xml');

      end;

      FuncPtr := nil;
    end else ShowMessage('Plugin-DLL ist Fehlerhaft');
    FreeLibrary(DLLHandle);
  end;
end;
Das Problem liegt in der Anweisung "GetProcAdress()" und der Rest danach scheint auch nicht wirklich zu funktionieren... In der OH steht nix zu DLLs...

Hope for fast help,
Chris

jbg 14. Nov 2002 19:07

Re: DLL-Problem
 
Zitat:

Zitat von Chakotay1308
Das Problem liegt in der Anweisung "GetProcAdress()"

Ich denke eher, dass das Problem in der Verwendung von 2 Variablen liegt?
Zitat:

Delphi-Quellcode:
InstFuncPtr := GetProcAdress(DLLHandle,'install');
if FuncPtr <> nil then begin

Schau dir die Variablennamen nochmal genau an.

CalganX 14. Nov 2002 19:12

Hi,
danke, habe es geändert, aber er hängt immer noch bei GetProcAdress...

Chris

Christian Seehase 14. Nov 2002 19:27

Moin Chris,

dazu fallen mir erst einmal zwei Sachen ein:
  1. Gibt LoadLibrary überhaupt ein gültiges Handle (<> 0) zurück
  2. Heisst die Funktion die aufgerufen werden soll wirklich install oder etwa Install. Es muss genau auf die Gross-/Kleinschreibung geachtet werden.

CalganX 14. Nov 2002 19:31

Er bricht ja nicht während der Laufzeit ab, sondern beim compilieren... "Undeclared identifier: GetProcAdress"...

chris

Christian Seehase 14. Nov 2002 19:34

Moin Chris,

wäre ganz hilfreich gewesen, wenn Du das dazugeschrieben hättest :mrgreen:

Die Funktion heisst GetProcAddress mit zwei d.

CalganX 14. Nov 2002 19:36

*ARGH*
Jetzt läufts.... Aber... aber... im Buch, da.... NEIN! Da stands auch...
Sinnloseter Beitrag in der Geschichte der DP...

Chris

Luckie 14. Nov 2002 21:31

Falls du noch mehr Infos brauchst, kuckst du hier: DLL-Tutorial vom Meister Assarbad


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:49 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