在服务器端定义接口方法
客户端实现其方法
然后在服务端通过如下方法调用
CComQIPtr<IConnectionPointContainer,&IID_IConnectionPointContainer> pCPC( m_pFont );
CComPtr<IConnectionPoint> pCP;
if(pCPC)
{
//查找该连接点
pCPC->FindConnectionPointIID_IPropertyNotifySink,&pCP );
if(pCP)
{
pCP->Advise( (IUnknown*) m_pFontNotifySink,
&m_pFontNotifySink>m_FontNotifyCookie );
}
}
客户端实现其方法
然后在服务端通过如下方法调用
CComQIPtr<IConnectionPointContainer,&IID_IConnectionPointContainer> pCPC( m_pFont );
CComPtr<IConnectionPoint> pCP;
if(pCPC)
{
//查找该连接点
pCPC->FindConnectionPointIID_IPropertyNotifySink,&pCP );
if(pCP)
{
pCP->Advise( (IUnknown*) m_pFontNotifySink,
&m_pFontNotifySink>m_FontNotifyCookie );
}
}
IConnectionPointContainer 和
IConnectionPoint
其实的和普通的COM没有分别。事件的引入接口其实是由客户端实现的,我们只要简单的在IDL定义它就行了,不必实现。如果是ATL,向导会为每个连接点引入接口实现一个包装类,事件的触发就是在这里完成的。客户端组件实现起来也是很容易的,注意一点就是事件的触发是用IDispatch接口的方法Invoke来实现,所以你的接收器组件一定要实现IDispatch.可以看一下IDispEventSimpleImpl和IDispEventImpl的帮助。事实上如果事件源和接收器都是你自己写的话,会有更简单的方法实现它。