Einzelnen Beitrag anzeigen

snook

Registriert seit: 25. Jun 2010
94 Beiträge
 
Delphi 2005 Professional
 
#1

pointer auf Interface als messageparameter

  Alt 27. Mär 2011, 14:56
Delphi-Version: 5
hallo,

ist es möglich einen pointer auf ein interface irgendwie in einen messageparameter zu packen?
folgendes konstrukt funktioniert zwar beim umwandeln pinterface --> pointer, aber zurück gibts ne AV

Delphi-Quellcode:
type
  IPlugIn = interface(IUnknown)
    ...
  end;

  TCustomPlugIn = class(TInterfacedObject, IPlugIn)
    ...
  end;

  PPlugIn = ^IPlugIn

  PPlugInEvent = ^TPlugInEvent;
  TPlugInEvent = packed record
    ...
    PlugInAddr: LongInt;
  end;


function AsPPlugIn(const PlugIn: IPlugin): Pointer;
begin
  GetMem(result,SizeOf(PPlugIn));
  PPlugIn(result) := @PlugIn;
end;

function AddEvent(...const PlugIn: IPlugIn): integer;
begin
  ...
  PPlugInEvent(FEventList[result])^.PlugInAddr := LongInt(AsPPlugIn(PlugIn));
// liefert beim Auswerten für PPlugIn(PlugInAddr)^: (TCustomPlugin($Adresse) as IPlugIn)
end;

// bei einem späteren Aufruf gibts aber ne AV:

procedure HoleInterfaceAusEvent(index: integer; out PlugIn);
begin
  PlugIn := PPlugIn(PPlugInEvent(FEventList[index])^.PlugInAddr)^;
// hier sieht man bei Ausdruck überwachen nur noch PPlugIn(PPlugInEvent(FEventList[index])^.PlugInAddr)^ = (Pointer($Adresse) as IPlugIn)
end;
gibt es da irgendeine andere möglichkeit an das interface zu kommen?
  Mit Zitat antworten Zitat