我的一亩三分地 我就喜欢!
13fen  设为主页
 收藏本站
 
当前位置: > 一亩三分地:首页 > 网络技术 > 网络综合 > 在基于MFC的COM客户中创建Sink接口
热门文章排行
热门文章排行 巧妙排除网络连接故障(11-16)
让媒体播放器实现列表播放(12-05)
无图像、无声音、图像声音不同步问题(12-05)
颠覆WLAN英特尔演示220Mbps无线超宽(12-05)
无线标准大扫描(4)(12-05)
精采文章排行
精采文章排行
技术专题推荐
网管论坛交流
 

在基于MFC的COM客户中创建Sink接口 

作者:   来源:[网络]   点击:   日期:2006-11-18

概要
Microsoft Foundation Classes (MFC)有wizard支持添加sink到ActiveX 控制的界面. 但是, 这技术支持不延伸到其它COM服务器. 这文章描绘怎样在MFC客户中添加sink界面。请注意,本文应用到源接口,它是一个disp接口,或一个双接口。

更多信息
这里是向COM客户添加sink接口的步骤:

使用Class Wizard,加CCmdTarget有自动化支持的派生对象(例如, CMySink)。在Class Wizard中, 选择Automation选项,而不使用"Createable by type ID"。在界面图中,改变IID (在INTERFACE_PART宏中第二参数),让它指定源接口的IID。.idl文件能通过查看OLE/COM Object Viewer中的typelib。在CMySink的DISPATCH_MAP中,添加一DISP_FUNCTION_ID宏,它用于定义希望处理的事件的定义。例如:

BEGIN_DISPATCH_MAP(CMySink, CCmdTarget)
DISP_FUNCTION_ID(CMySink,"Quit",2,OnObjQuit,VT_EMPTY,VTS_I4 VTS_I4)
END_DISPATCH_MAP()

在上方的代码一因为处理离开事件入口的,它使用DISPID=2。现在就可以准备连接接口了,在服务器对象创建时调用AfxConnectionAdvise()。例如:

//初始化对象,并保存对象指针。
m_pSink = new CMySink();

//得到sinks IUnknown接口的指针, 不用AddRef.
LPUNKNOWN pUnkSink = m_pSink->GetIDispatch(FALSE);

//建立来源和sink之间关系,其中m_pUnkSrc是经过CoCreateInstance的调用而得到服务器IUnknown的。
//m_dwCookie是标记连接用的,将来使用这中止连接。
AfxConnectionAdvise(m_pUnkSrc, IID_MYEVENT, pUnkSink, FALSE, &m_dwCookie);

当你已完成用服务器对象时,在释放服务器对象之前,你需要停止连接. 你通过调用AfxConnectionUnadvise完成。例如:

//得到sinks IUnknown接口的指针, 不用AddRef.
LPUNKNOWN pUnkSink = m_pSink->GetIDispatch(FALSE);

//中止连接。其中m_pUnkSrc是经过CoCreateInstance的调用而得到服务器IUnknown的,m_dwCookie是AfxConnectionAdvise()得到的。
AfxConnectionUnadvise(m_pUnkSrc, IID_MYEVENT, pUnkSink, FALSE, m_dwCookie);

因为CMySink是在堆上被建立,确保你删除它以避免内存漏洞。

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【论坛讨论

   相关文章:
·网络端口及其详解<三> ·网吧另类文章
·Win2K/WinXP网络显示配置常用命令 ·个人服务器之Win2000 DNS服务器的设
·网络端口及其详解<二> ·网络端口及其详解<一>

   文章评论:(条)
  
 请留名: 匿名评论   点击查看所有评论 网管论坛
 

  责任编辑:一分  声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。