Hallo,
hab ja gesagt, dass ich PlugIns lade. Jetzt hier nochmal der Quelltext, der mein PlugIn läd. Ist das so korrekt von der vorgehensweise? Der Code ist momentan (zum Lernen) aus Sakura's PlugIn-Tut. Habe ein Schema drangehängt und nochmal eine Frage, ob er an der Stelle, die markiert ist, wirklich das macht, was ich aufgeschrieben habe. Hätte dazu gerne nochmal eine genauere Erklärung.
Delphi-Quellcode:
procedure TForm1.LoadPlugin(DLLName: string);
var
TempHandle: Cardinal;
ProcAddr: Pointer;
LoadPlugInProc: TLoadPlugIn;
TempPlugIn: TPlugIn;
begin
// load library
TempHandle := LoadLibrary(PChar(DLLName));
if (TempHandle <> INVALID_HANDLE_VALUE) and (TempHandle <> 0) then
begin
// library loaded, load register function
ProcAddr := GetProcAddress(TempHandle, 'LoadPlugIn');
if ProcAddr = nil then
begin
// register function not exported
FreeLibrary(TempHandle);
Exit;
end;
LoadPlugInProc := TLoadPlugIn(ProcAddr); //<------DIESE STELLE
try
TempPlugIn := nil;
LoadPlugInProc(Application.Handle, TempPlugIn);
except
// register function invalid
FreeLibrary(TempHandle);
Exit;
end;
// add to array of plug-ins
SetLength(FPlugIns, Succ(Length(FPlugIns)));
FPlugIns[High(FPlugIns)].Handle := TempHandle;
// test for plug-in object
if TempPlugIn <> nil then
begin
// plug-in object exists, add to menü
FPlugIns[High(FPlugIns)].PlugIn := TempPlugIn;
FPlugIns[High(FPlugIns)].MenuItem := TMenuItem.Create(Self);
FPlugIns[High(FPlugIns)].MenuItem.Caption := TempPlugIn.GetPlugInName;
PlugIns1.Add(FPlugIns[High(FPlugIns)].MenuItem);
FPlugIns[High(FPlugIns)].MenuItem.OnClick:=ExecutePlugIn;
end else begin
// plug-in does not exist
FPlugIns[High(FPlugIns)].PlugIn := nil;
FPlugIns[High(FPlugIns)].MenuItem := nil;
end;
end else
begin
FreeLibrary(TempHandle);
Exit;
end;
end;
Danke