Einzelnen Beitrag anzeigen

sunny-andy

Registriert seit: 11. Nov 2007
26 Beiträge
 
#1

Runtime-Package gibt Pointer auf ein Interface zurück

  Alt 6. Apr 2008, 01:51
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
  Mit Zitat antworten Zitat