Hallo!
Per LoadPackage lade ich ein Runtime-
Package und führe dort die Funktion "Boot" aus, welche mir ein Objekt vom Typ "IPluginManager" zurückgeben soll.
IPluginManager ist bei mir ein Interface.
Delphi-Quellcode:
var
proc: procPointer;
pModule: HModule;
dc: TPluginDeliveryClasses;
pm: IPluginManager;
begin
pModule := LoadPackage('
C:\xyz.bpl');
if pModule = 0
then
raise EPackageException.Erzeugen(format('
Das Package %s wurde nicht gefunden', [TUmgebungsvariablen(TUmgebungsvariablen.NewInstance).DEFAULT_PLUGIN_MANAGER_FILE]));
try
@proc := GetProcAddress(pModule, '
Boot');
if Assigned(proc)
then
begin
dc := TPluginDeliveryClasses.Erzeugen;
pm := proc(
dc);
pm.LoadPlugins; <-------- Hier machts Peng!!
end else
raise EPackageException.Erzeugen(format('
Das Package %s enthält keine korrekt Boot-Methode', [TUmgebungsvariablen(TUmgebungsvariablen.NewInstance).DEFAULT_PLUGIN_MANAGER_FILE]));
Also im Debug-Modus sehe ich, dass pm einen Pointer auf das Interface "IPluginManager" enthält. Wenn ich die Methode LoadPlugins ausführe, gibt es aber eine AccessViolation. Das Objekt wurde aber richtig erstellt, deshalb denke ich, liegt der Fehler darin, dass ich den Pointer falsch behandel, oder?
Ich weiß leider nicht so genau, wie ich das machen muss. Habt ihr einen Tipp?
Delphi-Quellcode:
function Boot(DeliveryClasses: TPluginDeliveryClasses): IPluginManager;
var
pm: TPluginManager;
begin
pm := TPluginManager.Erzeugen(DeliveryClasses);
result := pm;
end;
Dankeschön,
Andy