Hi,
erstmal sorry für den Titel, aber ich kann das Problem nicht genauer beschreiben.
Delphi-Quellcode:
procedure Tfmain.AddPlugInButton(
const Name:
String; FileName:
String;
Tag: Integer);
var
Item: TTBXCustomItem;
begin
Item := TTBXCustomItem.Create(tbPlugIns);
Item.Caption :=
Name;
Item.OnClick := PlugInClick;
Item.Tag := Tag;
tbPlugIns.Add(Item);
end;
procedure Tfmain.LoadPlugIns;
type
TInitPlugIn =
function: IPlugIn;
stdcall;
var
SR: TSearchRec;
hDll: HWND;
aProc: TInitPlugIn;
fProc: TFarProc;
iPlg: IPlugIn;
I: Integer;
begin
I := 0;
if FindFirst(ExePath + '
PlugIns\*.dll', faAnyFile, SR) = 0
then
begin
repeat
hDll := LoadLibrary(PChar(ExePath + '
PlugIns\' + SR.
Name));
fProc := GetProcAddress(hDll, '
InitPlugIn');
if fProc <>
nil then
begin
aProc := fProc;
iPlg := aProc;
AddPlugInButton(IPlg.GetName, ExePath + '
PlugIns\' + SR.
Name, I);
PlugInList.Add(iPlg);
Inc(I);
iPlg :=
nil;
end
else
begin
Exception.CreateFmt('
Kann InitPlugIn im PlugIn %s nicht finden!',
[SR.
Name]);
end;
FreeLibrary(hDll);
until FindNext(SR) <> 0;
end;
if PlugInList.Count = - 1
then
tbPlugIns.Enabled := false
else
tbPlugIns.Enabled := true;
end;
procedure Tfmain.PlugInClick(Sender: TObject);
var
mApp: TApp;
begin
mApp := TApp.Create;
(PlugInList[(Sender
as TTBXCustomItem).Tag]
as IPlugIn).Execute(mApp);
// Hier kommt eine Zugriffverletzung
FreeAndNil(mApp);
end;
Die PlugIn-Schnittstelle ist die von ipb oder ibp (weiß nicht mehr genau wie rum
).
Die Schnittstelle ist noch nicht erweitert, ich wollte erstmal sehen wie ich die ganzen PlugIns lade.