Du hast ein Objekt mit mehreren Interfaces. Wenn du das Objekt erzeugst und in einer
Objektvariablen speicherst, ist der Referenzzähler=0.
Wenn du dir einen
Interfacepointer besorgst, wird der Referenzzähler (Property RefCount) auf 1 erhöht.
Sobald der Interfacepointer auf nil gesetzt oder ausserhalb des Scope gerät, wird der Referenzzähler auf 0 erniedrigt und
automatisch der Destructor aufgerufen.
Deine Objektvariable zeigt jetzt auf ein ungültiges Objekt.
Abhilfe:
a.) nicht Objektvariablen und Interfacepointer parallel benützen
oder
b.) Zusätzlichen Interfacepointer benützen, um das Objekt am Leben zu halten:
Delphi-Quellcode:
var
FMyObj: TObject; // Objektvariable (auch ein Zeiger)
FIMyObj : IUnknown; // Interfacepointer
...
FMyObj:= TObject.Create;
FIMyObj := FMyObj as IUnknown;
// ab jetzt darf man mit FMyObj (oder FIMyObj) arbeiten
...
...
// nun kommt der Zeitpunkt des Todes
FIMyObj := nil;
FMyObj := nil;
// FMyObj.Free ist aber nicht erlaubt !!!