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 :

Composant ATL COM


Sujet :

MFC

  1. #1
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 12
    Par défaut Composant ATL COM
    J'ai créé un composant COM, avec une interface graphique.

    J'ai un champ long m_lValeur dans mon objet COM, que je peux accéder depuis l'extérieur. J'ai mis un trace dans l'objet COM dans les fonctions get et set permettant l'accès à mon champ long. Les données passées dans l'objet COM par mon prog test extèrieur sont equivalentes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    /////////////////////////////////////////////////////////////////////////////
    STDMETHODIMP CVideoPlayer::get_Valeur(long *pVal)
    {
    	*pVal = m_lValeur;
    	ATLTRACE(_T("get_Valeur::m_lValeur = %d\n"), m_lValeur);
    	return S_OK;
    }
     
    STDMETHODIMP CVideoPlayer::put_Valeur(long newVal)
    {
    	m_lValeur = newVal;
    	ATLTRACE(_T("put_Valeur::m_lValeur = %d\n"), m_lValeur);
    	return S_OK;
    }
    Dans .IDL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    interface IVideoPlayer : IDispatch
    	{
    		[propget, id(1), helpstring("property Valeur")] HRESULT Valeur([out, retval] long *pVal);
    		[propput, id(1), helpstring("property Valeur")] HRESULT Valeur([in] long newVal);
    	};
     
    /////////////////////////////////////////////////////////////////////
    Mais, lorsque j'utilise ce champ long m_lValeur dans d'autres fonctions, comme dans une gestion d'évenement (OnBtnClick), le champ n'est pas rempli, il ne correspond pas à la donnée passée par le Set.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //////////////////////////////////////////////////////////////////////////
    LRESULT OnClickedBtnplay(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
    	{
    		CWindow hEdit;
    		TCHAR str[20];
    		m_lValeur++;
    		ATLTRACE(_T("OnClickedBtnplay::m_lValeur = %d\n"), m_lValeur);
    		wsprintf(str, _T("%ld"), m_lValeur);
    		hEdit = GetDlgItem(IDC_EDTMEDIA);
                    hEdit.SetWindowText(str);
     
    		return 0;
    	}
    Merci de votre aide.

  2. #2
    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
    Montre le *.h de ton objet COM.

  3. #3
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 12
    Par défaut
    J'ai trouvé le Bug, en faite c'est dans l'utilisation de l'objet COM dans un projet MFC. Il ne s'utilise pas de la même facon si il est uniquement algorithmique ou graphique.

    La mise en oeuvre des objets COM n'est vraiment pas pratique en C++.

    Merci.

  4. #4
    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
    Quand tu parles de "graphique" tu fais allusion à un contrôle ActiveX (= COM + support graphique)

    Citation Envoyé par vanes92
    La mise en oeuvre des objets COM n'est vraiment pas pratique en C++.
    Je ne vois pas un langage aussi souple dans toutes les constructions orienté-objets possibles tel que le C++ qui puisse implémenter la philosophie de COM dans toutes ses caprices.

    Le but de ATL était de faciliter la programmation des objets COM en abordant les interfaces COM comme classes de base multiples. Et je crois (avis personnel) qu'il le fait mieux que MFC. Alors que MFC implémente les interfaces COM en tant que classes imbriquées.


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. handle des composants ATL
    Par yannfrance dans le forum Débuter
    Réponses: 5
    Dernier message: 13/03/2009, 19h26
  2. création composant ATL
    Par JJkarim dans le forum Visual C++
    Réponses: 5
    Dernier message: 05/03/2008, 16h58
  3. Problème dans un projet ATL COM avec DLL et MFC.
    Par jamais34 dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 03/10/2007, 19h03
  4. [ATL-COM] Identifier l'origine d'une fuite mémoire
    Par Mat.M dans le forum Visual C++
    Réponses: 5
    Dernier message: 20/06/2007, 19h47
  5. Les composants : ATL, DLL, COM, OCX, ...
    Par Pucpood dans le forum Windows
    Réponses: 3
    Dernier message: 04/07/2003, 10h03

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