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.
Dans .IDL :
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; }
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 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); }; /////////////////////////////////////////////////////////////////////
Merci de votre aide.
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; }![]()
Partager