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.