Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Interface freigeben? (https://www.delphipraxis.net/134283-interface-freigeben.html)

Angel4585 19. Mai 2009 09:22


Interface freigeben?
 
Hallo,

ich hatte Probleme mit der TXMLDocument Komponente, da ich keinen Owner für diese habe.
Jetzt verwende ich das IXMLDocument, was ja so wie ich das sehe ein Interface ist.
Muss man das garnicht irgendwie freigeben oder so? :wiejetzt:

:angel:

sirius 19. Mai 2009 09:27

Re: Interface freigeben?
 
Nein muss man nicht. Wird genauso freigegeben wie ein String oder ein dynamisches Array.

hoika 19. Mai 2009 09:44

Re: Interface freigeben?
 
Hallo,

du kannst die Variable zwar NIL setzen.
aber richtig frei wird sie erst, wenn der Scope
(die Prozedur, in der die Variable definiert ist),
verlassen wird.

Man sollte Interface-Variablen deshalb immer lokal definieren.


Heiko

himitsu 19. Mai 2009 09:55

Re: Interface freigeben?
 
hmmm, in Delphi dacht ich, würde das freigegeben, wenn keine "Variable" mehr darauf verweißt?

Stevie 19. Mai 2009 09:56

Re: Interface freigeben?
 
Zitat:

Zitat von hoika
du kannst die Variable zwar NIL setzen.
aber richtig frei wird sie erst, wenn der Scope
(die Prozedur, in der die Variable definiert ist),
verlassen wird.

Das stimmt so nicht.
Sofern Referenzzählung implementiert ist, dekrementiert das setzen einer Interface variablen den Referenzcounter. Erreicht dieser 0, wird das Objekt, welches das Interface implementiert und ursprünglich erzeugt wurde, freigegeben.

quendolineDD 19. Mai 2009 09:57

Re: Interface freigeben?
 
Jap. Man kann die Autoreferenzierung auch selber umgehen. ABer da muss man IMHO genau wissen, das man die nicht mehr braucht. Gab auch einige Beiträge zu dem Thema hier im Forum.

sirius 19. Mai 2009 10:06

Re: Interface freigeben?
 
Zitat:

Zitat von hoika
Hallo,

du kannst die Variable zwar NIL setzen.
aber richtig frei wird sie erst, wenn der Scope

Nö, wenn sie auf nil gesetzt wird, wird automatisch _Release aufgerufen. Das führt u.U. zur Freigabe (wenn die Variable die einzige Referenz war)

hoika 19. Mai 2009 10:48

Re: Interface freigeben?
 
Hallo,

ja, bei Excel ist das aber etwas anders (OK, es ging nicht um Excel ...).
Es gab vor kurzem hier einen Thread bezüglich OLE-Automation
und dann Öffnen der erzeugten Excel-Datei (ebenfalls per OLE).

Klappt nicht (habe ich selber am eigenen Leib erlebt),
wenn beides in einer einzigen Routine erfolgt.

Lagere ich das Erzeugen und Anzeigen in 2 Routinen aus,
jeweils mit eigenen lokalen Interface-Variablem,
klappt es.


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz