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?