Nightmare_82 hat folgendes geschrieben: |
und hatte das problem, daß die Referenzzählung nicht richtig funktioniert, wenn man lokale Variablen(Pointer) vom Interface deklariert und zuweist. |
Und was funktionierte nicht bzw. was waren die Auswirkungen der angeblich falschen Referenzzähler?
Zitat: |
Variablen(Pointer) |
Hast du etwa folgendes gemacht?
Delphi-Quelltext
1: 2: 3: 4:
| var p: Pointer; begin p := GetMyInterface; end; |
Wenn ja, dann ist es kein Wunder das der Referenzzähler durcheinanderkommt. Denn ein Pointer wird vom Compiler als Zeiger behandelt und nicht als Interface. Somit fügt der Compiler keine AddRef und _Release Aufrufe ein.
Wenn du alle möglichen Interfaces zurückliefern möchtest, kannst du anstatt Pointer den Typ IInterface verwenden.
Das Konvertieren eines Interfaces in einen Pointer nutzt man nämlich normalerweise, wenn man die Referenzzählung umgehen will. Was z.B. bei zirkulären Referenzen von Klassen vorkommt.