Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Scheinbar Verständnissproblem bezüglich Interfaces...

  Alt 19. Feb 2007, 17:01
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 !!!
Andreas
  Mit Zitat antworten Zitat