WEB开发网      濠电娀娼ч崐濠氬疾椤愶附鍋熸い鏍ㄧ〒闂勫嫰鏌﹀Ο渚Ц闁诲氦顕ч湁婵犲﹤楠告禍鍓х磼鏉堛劌绗氶柟宄版嚇閹晠宕归銈嗘濠电偞鍨堕幐鎾磻閹捐秮褰掓偐閻戞﹩妫勯梺鎼炲妼鐎涒晝绮嬪澶樻晝闁挎繂鏌婇敃鍌涚厵閻庢稒锚閻忥絾绻濇繝鍐ㄧ伌闁诡垰鍟村畷鐔碱敂閸♀晙绱樺┑鐐差嚟婵儳螞閸曨剚鍙忛柍鍝勬噹缁€澶嬬箾閹存繄锛嶆鐐灲閹綊宕惰濡插鏌涢妸銉ヮ劉缂佸倸绉归弫鎾绘晸閿燂拷 ---闂備焦瀵уú鈺呭箯閿燂拷
开发学院软件开发VC COM对象与连接点机制及其MFC程序实现 阅读

COM对象与连接点机制及其MFC程序实现

 2010-06-04 20:39:28 来源:WEB开发网 闂備線娼уΛ鎾箯閿燂拷闂備礁鎲¢崹鐢垫崲閹扮増鍎嶆い鎺戝€甸崑鎾斥槈濞嗗秳娌紓鍌氱▌閹凤拷濠电姭鎷冮崨顓濈捕闂侀潧娲ゅú銊╁焵椤掍胶鈯曢柕鍥╁仧缁辩偤鏁撻敓锟�闂備線娼уΛ鎾箯閿燂拷  闂備胶枪缁绘鈻嶉弴銏犳瀬闁绘劖顐煎☉妯锋瀻闁归偊鍓涘▔姘舵⒑閸涘⿴娈旀繛灞傚妼閳绘捇骞嬪┑鎰濡炪倖姊婚崢褏鎲撮敓锟�
核心提示:6.编写按钮”断开”(IDC_DISCONNECT)的CLICK处理函数如下:void CConnClientDlg::OnDisconnect(){if(m_dwCookie==0){return;}pConnPt->Unadvise(m_dwCookie);pConnPt->Re

6.编写按钮”断开”(IDC_DISCONNECT)的CLICK处理函数如下:

void CConnClientDlg::OnDisconnect()
{
if(m_dwCookie==0)
{
return;
}
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文档中有一个示例.

上一页  1 2 3 4 5 

Tags:COM 对象 连接点

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接