龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

COM中的可连接对象与连接点机制及其MFC程序实现(9)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
pConnPt-Unadvise(m_dwCookie); pConnPt-Release(); pConnPtCont-Release(); m_dwCookie = 0; } 7.编写按钮”事件”(IDC_EVENT)的CLICK处理函数: void CConnClientDlg::OnEvent() { if(m_pIUnknown!=NU

pConnPt->Unadvise(m_dwCookie);

pConnPt->Release();

pConnPtCont->Release();

m_dwCookie = 0;

  7.编写按钮”事件”(IDC_EVENT)的CLICK处理函数:

void CConnClientDlg::OnEvent()

{

if(m_pIUnknown!=NULL)

{

IEventServer* pIEventServer;

HRESULT hResult;

hResult = m_pIUnknown->QueryInterface(IID_IEventServer,(void**)&pIEventServer);

if(FAILED(hResult))

{

::AfxMessageBox("不能获取IEventServer接口!");

return;

}

pIEventServer->DoSomething();

}

  这里,客户调用组件提供的服务DoSomething(),而正如前面所看到的,组件对象将在这个函数中触发一个由客户事件接收器处理(CConnClientDlg::XEventSink::EventHandle())的事件.

  8.在退出应用时:

void CConnClientDlg::OnCancel()

{

m_pIUnknown->Release();

::CoUninitialize();

CDialog::OnCancel();

  运行程序后,首先点击”连接”,然后点击”事件”按钮,这时将弹出MessageBox,并提示” 源对象向事件接收器发出了的通知!”.

  小结

  正是由于有了可连接对象这一机制,实现了客户与组件对象的双向通信,使组件对象具有了事件机制.这种类似于”服务器推送(Server push)”的技术在分布式应用系统中十分重要.

  本文所举示例是用基于IUnknown接口实现的,其实,用自动化接口IDispatch作为出接口更为方便.需要说明的是,用ATL来写可连接对象更为简洁,MSDN文档中有一个示例.

精彩图集

赞助商链接