IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Question sur COM et CComPtr


Sujet :

MFC

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Ao�t 2005
    Messages
    13
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 13
    Par d�faut Question sur COM et CComPtr
    Bonjour � tous, je dois bien qu'ayant aucune connaissance � la base developper un projet utilsant les objets COM d'un logiciel quelconque. A force de lecture de tutoriels dont celui de developpez. com (remarquable au passage) et d'exemples, j'ai r�ussi � cr�er des programmes qui marchent. Sauf qu'� la fin du ledit programme, j'ai des probl�mes de d�salocations m�moires (le d�buggeur me dit qu'il bloque sur la fonction release) dans la d�finition du fichier CComPtr mais tout les exemples que j'ai lu utilise ce template. Alors que fais-je de mal?
    J'aimerai donc savoir ce que fait exactement CComPtr?
    Y a t il une diff�rence entre:
    -IInteface* objet=NULL
    - CComPtr<IInterface> objet

    Je remercie par avance toute r�ponse ca me permettra de finir mon projet.

    Cordialement

  2. #2
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    Comment initialises-tu ton pointeur ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Ao�t 2005
    Messages
    13
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 13
    Par d�faut
    Bah j'ai toujours utilis� CComPtr, mais depuis mes soucis j'ai essay� la deuxi�me formulation qui donne les m�mes r�sultats et rend les choses plus stable. J'ai eu donc l'impression que c'�tait les CComPtr qui me posait probl�me .
    Mais j'y comprend donc plus rien car selon MSDN CComPtr est une template servant � initialiser un pointeur d'une interface COM et devrait donc � priori poser aucun probl�me d'autant plus que tous mes exemples utilise cette template.
    Donc d'o� la question que font r�ellement les CComPtr et eventuellement y-a-til des pr�cautions d'usage.

  4. #4
    Membre �prouv�
    Inscrit en
    Avril 2004
    Messages
    122
    D�tails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 122
    Par d�faut
    Salut,
    Ce que tu as est donc un smart pointer. Il faut bien comprendre q'un smart pointer encapsule une interface. De ce fait lorsque tu fait ptr = NULL, un release est fait sur ton interface. De m�me lorsqu'un smart pointer est d�truit un release est effectu� sur l'interface.
    IInterface = NULL est diff�rent de ptr = NULL, car dans le premier cas, ton interface n'est pas d�truite (pas de release donc risque de perdre ton interface) mais dans le deuxi�me, ton interface est d�truite (release).
    Il faut que tu faces tr�s attention aux AddRef et Release qui sont fait sur tes interfaces pour ne pas en perdre.
    Une autre remarque, lorsque tu cr�e un CComPtr, un Addref est effectu� sur ton interface pass� en param�tre, le CComPtr prend contr�le de ton interface donc si tu n'as plus besoin de ton interface apr�s, tu dois faire un release.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Ao�t 2005
    Messages
    13
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 13
    Par d�faut
    Il faut que tu fasses tr�s attention aux AddRef et Release qui sont faits sur tes interfaces pour ne pas en perdre.
    Justement c'est le point avec leque j'ai le plus du mal. Car jusqu'� ce jour j'utilisais des constructeurs et des destructeurs et je me posais pas plus de question. Donc j'ai du mal � voir pourquoi un compteur d'interface est n�cesssaire.


    le CComPtr prend contr�le de ton interface
    Pour moi avec le CComPtr servait � cr�er un pointeur d'une instance de l'interface (que je manipule comme une classe classique). Donc quand tu dis "prend le contr�le" tu sous-entends un m�canisme particulier � la technologie COM.
    et dermier point obscur

    smart pointer encapsule une interface
    Pour moi c'�tait une classe qui en encapsulait une autre et non pas un pointeur. Donc qu'apporte ce m�canisne du point de vue des propri�t�es?

  6. #6
    Membre �m�rite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par d�faut
    Bonsoir,

    La diff�rence entre un pointeur d'interface et un objet CComPtr n'est pas tr�s grande.

    La r�gle COM dit que :"Si tu veux utiliser une interface IInterface d'un objet COM tu dois incr�menter son compteur de r�f�rence en appelant AddRef() sur l'interface. Si tu as finis avec cette interface tu invoques Release() sur la m�me interface."
    Ainsi COM sait combien de client se sont li�s sur cette interface et sait quant-est-ce qu'il faut lib�rer l'objet COM lorsque aucun client n'empreinte l'interface.

    La classe CComPtr est une classe template de ATL (Active Template Library) c'est au fait une sorte de pointeur intelligent.
    Mais pourquoi est-il intelligent?

    Souvent les utilisateurs (programmes clients qui utilisent des objets COM) n'appliquent pas soigneusement la combinaison des AddRef()/Release() ce qui provoque le plus souvent des fuites de m�moire et par cons�quent non lib�ration des ressouces.
    Pour palier � cet inconv�nient le smart pointeur CComPtr est fournit afin d'encapsuler l'interface COM et de g�rer � notre place cette paire de AddRef()/Release(). CComPtr les utilise lors qu'il est soit construit o� lors des assignations(affections). Son op�rateur "=", masque ces appels.

    CComPtr a �galement pour but d'emp�cher l'utilisateur d'appeler directement sur lui cette paire de AddRef()/Release() En utilisant la classe _NoAddRefReleaseOnCComPtr voir sa m�thode de l'op�rateur surcharg� "operator->".

    La biblioth�que ATL fournit �galement d'autres pointeurs intelligents comme CComQIPtr qui lui h�rite de CComPtr en g�rant �galement les QueryInterface() � notre place.

    Gabrielly

  7. #7
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    bonsoir,
    tres bien tout �a ! ,�a sent la question pour la faq (M. Gabrielly) ?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Ao�t 2005
    Messages
    13
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 13
    Par d�faut
    Souvent les utilisateurs (programmes clients qui utilisent des objets COM) n'appliquent pas soigneusement la combinaison des AddRef()/Release()
    C'est bizarre mais je me sens pas concern� .
    J'ai donc tout int�r�t � utiliser les CComPtr, il prend en charge le tout dont notamment la d�salocation m�moire.
    Merci � tous pour ces indications et vous souhaite une bonne fin de semaine (expression Quebecquoise pour week-end).
    Grand merci et � une prochaine

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. trouver ses questions sur developpez.com
    Par ickyknox dans le forum G�n�ral Conception Web
    R�ponses: 2
    Dernier message: 26/05/2012, 16h28
  2. [MySQL] Question sur l'API YouTube lors de l'envoi de video, relatif au tuto de dev.com
    Par dekker dans le forum PHP & Base de donn�es
    R�ponses: 1
    Dernier message: 15/12/2011, 16h40
  3. Question sur le dico de developpez.com
    Par sovo dans le forum Evolutions du club
    R�ponses: 8
    Dernier message: 15/09/2006, 12h42
  4. R�ponses: 2
    Dernier message: 11/08/2002, 21h27
  5. question sur les message box !
    Par krown dans le forum Langage
    R�ponses: 7
    Dernier message: 02/08/2002, 16h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo