IConnectionPoint接口充当组件所支持的引出接口的一个连接点。客户机程序正是使用该接口与引出接口
进行连接的。
组件所支持的每一个引出接口必须提供一个连接点(即实现了IConnectionPoint的一个对象)。通过它客户
机可以传送他的接口实现。
组件只在它的QueryInterface实现中向外公开一个IConnectionPointContainer接口,并且每个客户机程
序必须通过IConnectionPointContainer来获得一个引出接口的IConnectionPoint实现。
我是使用CoMarshalInterThreadInterfaceInStream/CoGetInterfaceAndReleaseStream来做的,这需要你定义一个接口,比如我定义了一个:
interface IErrorMediator:IDispatch
{
[id(1), helpstring("method FireErrorEvent")] HRESULT FireErrorEvent(long nEventID, long wParam);
[id(2), helpstring("method SetUpdaterInstance")] HRESULT SetUpdaterInstance(long pUpdater);
};
然后,将这个接口Marshal给开的线程,线程内部通过调用
CoInitialize(NULL);
IErrorMediator *pErrorMediator=NULL;
HRESULT hRes =CoGetInterfaceAndReleaseStream(pThis->m_pStream,IID_IErrorMediator,(LPVOID*)&pErrorMediator);
然后调用
pErrorMediator->FireErrorEvent(DOWNLOADER_GET_REQUEST_FAILED,NULL);来发消息,
IErrorMediator的实现类再来Fire Event
STDMETHODIMP CErrorMediator::FireErrorEvent(long nEventID, long wParam)
{
switch(nEventID)
{
case DOWNLOADER_FILE_DOWNLOAD_START:
{
strFileName=(LPCTSTR)wParam;
m_pUpdater->Fire_OnFileDownload(strFileName);
//Don't forget this
delete[] (BYTE*)wParam;
}
break;
....
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。