Thema: Delphi einfaches plugin-system

Einzelnen Beitrag anzeigen

MathiasSimmack
(Gast)

n/a Beiträge
 
#6
  Alt 23. Jul 2002, 15:49
Du schreibst eine Funktion, wie etwa:
Code:
function IchBinEinPlugin: boolean;
begin
  MessageBox(0,'Da bin ich!','Plugin',
    MB_OK or MB_ICONINFORMATION);

  Result := true;
end;
Da es sich um eine DLL handelt, musst du dafür sorgen, dass diese Funktion auch exportiert wird. (Wie, steht in der Delphi-Hilfe.) Mir ist jetzt nichts Besseres eingefallen; aber bei einer Funktion sollte man noch irgendwas machen, dass den Rückgabewert rechtfertigt. Es kann also auch eine Prozedur sein.

Der Rest ist dynamisches Laden von DLL-Prozeduren und -Funktionen. Beispielsweise so:
Code:
type
  // diese Deklaration MUSS der Deklaration der
  // DLL-Funktion entsprechen!!!
  // In diesem Fall ist es also eine Funktion mit
  // Bool-Rückgabewert
  TDllFunc = function: boolean;
var
  MeineDll : dword = 0;
  DllFunc : TDllFunc;

{ ... }

MeineDll := LoadLibrary('plugin.dll');
if(MeineDll <> 0) then
  begin
     // hier wird versucht, die Funktion "IchBinEinPlugin"
     // (s. erstes Code-Beispiel) zu laden
     DllFunc := GetProcAddress(MeineDll,'IchBinEinPlugin');

     // geht nicht, dann ist´s auch kein Plugin von dir
     if(@DllFunc = nil) then
       begin
          FreeLibrary(MeineDll); MeineDll := 0;
       end;
  end;

{ ... } // irgendwas machen

// am Programmende immer die DLL(s) freigeben
if(MeineDll <> 0) then
  FreeLibrary(MeineDll);
So, ich hoffe, dass ich jetzt keine groben Schnitzer gemacht habe (vielleicht Schreibfehler), aber so sähe das Prinzip mit GetProcAddress aus. Bei all deinen Plugins solltest du immer den gleichen Funktionsnamen benutzen - in dem Fall also "IchBinEinPlugin" - damit dein Programm nur die korrekten DLLs lädt.

Wenn das Laden also geklappt hat, kann dein Programm die Plugin-Funktion aufrufen, was eine Dialogbox mit der Meldung "Da bin ich" zur Folge haben sollte.

Habe ich was vergessen, Leute?
  Mit Zitat antworten Zitat