OVH Cloud OVH Cloud

Detruire des objets en VB, comment fait-on?

4 réponses
Avatar
ThunderMusic
Bonjour,
J'ai un objet ATL COM écrit en VC++. J'utilise cet objet dans un projet
VB. L'objet fonctionne #1 jusqu'à ce que je veuille le détruire. En fait, je
le détruis sans erreur, mais cet objet contient des Threads et lorsque je
fais set pObj = Nothing, si je regarde dans le taskmanager, les Thread ne
sont pas détruites, ce qui implique que l'objet ne passe pas par son
destructeur.

Comment fait-on pour detruire un objet de facon "propre" et surtout "réelle"
autrement que par set pObj = Nothing ?

Merci

ThunderMusic

4 réponses

Avatar
Zoury
huumm.. je ne connais pas ATL... :O/

Les objets en VB sont détruit lorsque qu'il n'y a plus de référence à l'objet.
C'est le COM qui s'en occupe. Si tu as plus d'une référence à ton objet et que
tu n'en libères qu'une seule, ton objet n'est donc pas détruit.. est-ce que ça
peut-être ton cas?

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
"ThunderMusic" wrote in message
news:
: c'est ca le problème. la DLL libère ses propres ressources... si j'utilise
: mes classes en VC, tout se détruit #1, mais si j'intègre tout ca dans un ATL
: et que je vais dans VB, il ne passe jamais par le destructeur de l'ATL...
: Je trouve ca très bizard comme comportement...
:
: merci
:
: ThunderMusic
:
:
: "Zoury" wrote in message
: news:
: > Salut! :O)
: >
: > : Comment fait-on pour detruire un objet de facon "propre" et surtout
: "réelle"
: > : autrement que par set pObj = Nothing ?
: >
: > C'est la seule façon. Ton problème vient de la dll C++ et non pas de VB.
: Il faut
: > que la DLL libère ses propres ressources..
: >
: > --
: > Cordialement
: > Yanick Lefebvre - MVP pour Visual Basic
: > http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
: > http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
: >
:
:
Avatar
ThunderMusic
apres avoir tracé dans mon code, voici les résultats:

Il passe dans le destructeur de l'objet ATL et dans le destructeur de toutes
mes classes.
Au départ de mon application, j'ai 1 seule Thread, apres avoir créé l'objet
(et une 2ieme thread), j'ai 3 thread. Apres avoir passé dans tous mes
destructeurs et avoir envoyé la commande AfxEndThread(0), j'ai toujours 2
Threads (au lieu d'une seule).

Pourquoi?

Merci

ThunderMusic


"Zoury" wrote in message
news:
huumm.. je ne connais pas ATL... :O/

Les objets en VB sont détruit lorsque qu'il n'y a plus de référence à


l'objet.
C'est le COM qui s'en occupe. Si tu as plus d'une référence à ton objet et


que
tu n'en libères qu'une seule, ton objet n'est donc pas détruit.. est-ce


que ça
peut-être ton cas?

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
"ThunderMusic" wrote in message
news:
: c'est ca le problème. la DLL libère ses propres ressources... si


j'utilise
: mes classes en VC, tout se détruit #1, mais si j'intègre tout ca dans un


ATL
: et que je vais dans VB, il ne passe jamais par le destructeur de


l'ATL...
: Je trouve ca très bizard comme comportement...
:
: merci
:
: ThunderMusic
:
:
: "Zoury" wrote in message
: news:
: > Salut! :O)
: >
: > : Comment fait-on pour detruire un objet de facon "propre" et surtout
: "réelle"
: > : autrement que par set pObj = Nothing ?
: >
: > C'est la seule façon. Ton problème vient de la dll C++ et non pas de


VB.
: Il faut
: > que la DLL libère ses propres ressources..
: >
: > --
: > Cordialement
: > Yanick Lefebvre - MVP pour Visual Basic
: > http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
: > http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
: >
:
:



Avatar
Zoury
sans voir le code c'est difficile de deviner ce qui ne va pas. Tu pourrais aussi
posé cette question microsoft.public.fr.vc étant donné que nous ne somme
surement pas les mieux placé pour débugguer ton code c++. Mais si tu veux le
posté j'y jetterai un coup d'oeil. ;O)

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
"ThunderMusic" wrote in message
news:%
: apres avoir tracé dans mon code, voici les résultats:
:
: Il passe dans le destructeur de l'objet ATL et dans le destructeur de toutes
: mes classes.
: Au départ de mon application, j'ai 1 seule Thread, apres avoir créé l'objet
: (et une 2ieme thread), j'ai 3 thread. Apres avoir passé dans tous mes
: destructeurs et avoir envoyé la commande AfxEndThread(0), j'ai toujours 2
: Threads (au lieu d'une seule).
:
: Pourquoi?
:
: Merci
:
: ThunderMusic
:
:
: "Zoury" wrote in message
: news:
: > huumm.. je ne connais pas ATL... :O/
: >
: > Les objets en VB sont détruit lorsque qu'il n'y a plus de référence à
: l'objet.
: > C'est le COM qui s'en occupe. Si tu as plus d'une référence à ton objet et
: que
: > tu n'en libères qu'une seule, ton objet n'est donc pas détruit.. est-ce
: que ça
: > peut-être ton cas?
: >
: > --
: > Cordialement
: > Yanick Lefebvre - MVP pour Visual Basic
: > http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
: > http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
: > "ThunderMusic" wrote in message
: > news:
: > : c'est ca le problème. la DLL libère ses propres ressources... si
: j'utilise
: > : mes classes en VC, tout se détruit #1, mais si j'intègre tout ca dans un
: ATL
: > : et que je vais dans VB, il ne passe jamais par le destructeur de
: l'ATL...
: > : Je trouve ca très bizard comme comportement...
: > :
: > : merci
: > :
: > : ThunderMusic
: > :
: > :
: > : "Zoury" wrote in message
: > : news:
: > : > Salut! :O)
: > : >
: > : > : Comment fait-on pour detruire un objet de facon "propre" et surtout
: > : "réelle"
: > : > : autrement que par set pObj = Nothing ?
: > : >
: > : > C'est la seule façon. Ton problème vient de la dll C++ et non pas de
: VB.
: > : Il faut
: > : > que la DLL libère ses propres ressources..
: > : >
: > : > --
: > : > Cordialement
: > : > Yanick Lefebvre - MVP pour Visual Basic
: > : > http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
: > : > http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
: > : >
: > :
: > :
: >
:
:
Avatar
ThunderMusic
non, malheureusement, mais bon, c'est pas super grave... je vais poser ma
question dans un groupe vc...

merci... ;)

ThunderMusic


"Zoury" wrote in message
news:
as-tu des timers ou des connections ou des fichiers d'ouverts par un des


threads
que tu aurais pu oublier de fermé?

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
"ThunderMusic" wrote in message
news:%
: apres avoir tracé dans mon code, voici les résultats:
:
: Il passe dans le destructeur de l'objet ATL et dans le destructeur de


toutes
: mes classes.
: Au départ de mon application, j'ai 1 seule Thread, apres avoir créé


l'objet
: (et une 2ieme thread), j'ai 3 thread. Apres avoir passé dans tous mes
: destructeurs et avoir envoyé la commande AfxEndThread(0), j'ai toujours


2
: Threads (au lieu d'une seule).
:
: Pourquoi?
:
: Merci
:
: ThunderMusic
:
:
: "Zoury" wrote in message
: news:
: > huumm.. je ne connais pas ATL... :O/
: >
: > Les objets en VB sont détruit lorsque qu'il n'y a plus de référence à
: l'objet.
: > C'est le COM qui s'en occupe. Si tu as plus d'une référence à ton


objet et
: que
: > tu n'en libères qu'une seule, ton objet n'est donc pas détruit..


est-ce
: que ça
: > peut-être ton cas?
: >
: > --
: > Cordialement
: > Yanick Lefebvre - MVP pour Visual Basic
: > http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
: > http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
: > "ThunderMusic" wrote in message
: > news:
: > : c'est ca le problème. la DLL libère ses propres ressources... si
: j'utilise
: > : mes classes en VC, tout se détruit #1, mais si j'intègre tout ca


dans un
: ATL
: > : et que je vais dans VB, il ne passe jamais par le destructeur de
: l'ATL...
: > : Je trouve ca très bizard comme comportement...
: > :
: > : merci
: > :
: > : ThunderMusic
: > :
: > :
: > : "Zoury" wrote in message
: > : news:
: > : > Salut! :O)
: > : >
: > : > : Comment fait-on pour detruire un objet de facon "propre" et


surtout
: > : "réelle"
: > : > : autrement que par set pObj = Nothing ?
: > : >
: > : > C'est la seule façon. Ton problème vient de la dll C++ et non pas


de
: VB.
: > : Il faut
: > : > que la DLL libère ses propres ressources..
: > : >
: > : > --
: > : > Cordialement
: > : > Yanick Lefebvre - MVP pour Visual Basic
: > : > http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
: > : > http://www.mentalis.org/agnet/apiguide.shtml -


http://www.mztools.com/
: > : >
: > :
: > :
: >
:
: