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?