组件A,实现接口Call。A::Call{
Fire_call(); // 发出事件
}当定时器调用a->call时,客户端没有响应
但当客户端主动调用a->call时,客户端有相应。以上问题同链接(http://bbs.csdn.net/topics/260083360)是同一个问题,按照方法修改后, 客户端还是接收 不到定时器调用触发的消息。
Fire_call(); // 发出事件
}当定时器调用a->call时,客户端没有响应
但当客户端主动调用a->call时,客户端有相应。以上问题同链接(http://bbs.csdn.net/topics/260083360)是同一个问题,按照方法修改后, 客户端还是接收 不到定时器调用触发的消息。
STDMETHODIMP CBabyE::test(BSTR str1, BSTR s2)
{
AFX_MANAGE_STATE(AfxGetAppModuleState());
m_idTimer = ::SetTimer( NULL, 0, 10, TimerProc );//启动定时器
g_pDispConnect = this; return S_OK;
}
void static CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime )
{
HRESULT hRes = CoInitializeEx(NULL,COINIT_MULTITHREADED);
// CBabyE* pDispConnect = new CBabyE();
::KillTimer(NULL,g_pDispConnect->m_idTimer); //g_pDispConnect->test(_bstr_t("OnClickedSink4_p1"),_bstr_t("OnClickedSink4_p1"));
g_pDispConnect->Fire_Result( _bstr_t("OnClickedSink4_p1")); //再定时器里面调用触发函数
::CoUninitialize();
return;
}
STDMETHODIMP IConnectionPointImplMT<T, piid, CDV>::Unadvise(DWORD dwCookie)
{
m_CPMTCritSec.Lock();
//DWORD dwGITCookie = (DWORD)_CDV::GetUnknown(dwCookie); DWORD dwGITCookie = (DWORD)m_vec.GetUnknown(dwCookie); HRESULT hRes = m_vec.Remove(dwCookie) ? S_OK : CONNECT_E_NOCONNECTION;
m_CPMTCritSec.Unlock();
if (hRes == S_OK && dwGITCookie != NULL)
{
hRes = m_pGIT->RevokeInterfaceFromGlobal(dwGITCookie);
} return hRes;
}