WEB开发网
开发学院软件开发VC COM对象与连接点机制及其MFC程序实现 阅读

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

 2010-06-04 20:39:28 来源:WEB开发网   
核心提示:2、编程实例现在用MFC实现一个可连接对象,然后写一个极为简单的客户和时间接收器,COM对象与连接点机制及其MFC程序实现(2),需要说明的是,MFC通过CCmdTarget类实现了IConnectionPointContainer和IEnumConnectionPoints接口,此外,客户可以使用此接口的方法DoSo

2、编程实例

现在用MFC实现一个可连接对象,然后写一个极为简单的客户和时间接收器。

需要说明的是,MFC通过CCmdTarget类实现了IConnectionPointContainer和IEnumConnectionPoints接口,此外,通过CConnectionPoint类实现了IConnectionPoint接口

1.可连接对象ConnObject

在这个对象中,实现一个一般的COM接口IEventServer,客户可以使用此接口的方法DoSomething()作一些事情,但主要的是对象将在此处触发事件。SampleConnPoint实现连接点对象。

(1)在GUIDs.h中写入:

// {EE888B01-EA9C-11d3-97B5-5254AB191930}
static const IID CLSID_ConnObject = //组件ID
{ 0xee888b01, 0xea9c, 0x11d3, { 0x97, 0xb5, 0x52, 0x54, 0xab, 0x19, 0x19, 0x30 } };
// {EE888B02-EA9C-11d3-97B5-5254AB191930}
static const IID IID_IEventServer = //一般的COM接口,客户使用此接口的方法
//DoSomething()
{ 0xee888b02, 0xea9c, 0x11d3, { 0x97, 0xb5, 0x52, 0x54, 0xab, 0x19, 0x19, 0x30 } };
//// {EE888B03-EA9C-11d3-97B5-5254AB191930}
static const IID IID_IEventSink = //连接点对象所实现的连接点接口ID
{ 0xee888b03, 0xea9c, 0x11d3, { 0x97, 0xb5, 0x52, 0x54, 0xab, 0x19, 0x19, 0x30 } };

2. 在IConnObject.h中写入

#include "GUIDs.h"
//声明IEventServer接口
DECLARE_INTERFACE_(IEventServer,IUnknown)
{
STDMETHOD(DoSomething)()PURE;
};
//声明出接口,此出接口将由客户的事件接收器实现
DECLARE_INTERFACE_(IEventSink,IUnknown)
{
STDMETHOD(EventHandle)()PURE;
};

3.添加基类为CCmdTarget的类CConnObject.在类声明文件CConnObject1.h中加上#include “IConnObject.h”,在类声明中写入:

protected:
……
//声明实现IEventServer接口的嵌套类
BEGIN_INTERFACE_PART(EventServer,IEventServer)
STDMETHOD(DoSomething)();
END_INTERFACE_PART(EventServer)
DECLARE_INTERFACE_MAP()
//声明实现连接点的嵌套类
BEGIN_CONNECTION_PART(CConnObject,SampleConnPoint)
CONNECTION_IID(IID_IEventSink)
END_CONNECTION_PART(SampleConnPoint)
DECLARE_CONNECTION_MAP()
DECLARE_OLECREATE(CConnObject)

说明:BEGIN_CONNECTION_PART和END_CONNECTION_PART宏声明了实现连接点的嵌套类SampleConnPoint,并且是基于CConnectionPoint类的,如果需要重载CConnectionPoint类的成员函数或者添加自己的成员函数,可以在这两个宏中声明.这里,CONNECTION_IID宏重载了CConnectionPoint::GetIID()函数.使用DECLARE_CONNECTION-MAP()宏声明连接点映射表.

4.在类CConnObject的实现文件中写入

IMPLEMENT_OLECREATE(CConnObject,"ConnObject",
0xee888b01, 0xea9c, 0x11d3, 0x97, 0xb5, 0x52, 0x54, 0xab, 0x19, 0x19, 0x30);
BEGIN_INTERFACE_MAP(CConnObject,CCmdTarget)
INTERFACE_PART(CConnObject,IID_IEventServer,EventServer)
INTERFACE_PART(CConnObject,IID_IConnectionPointContainer,ConnPtContainer)
END_INTERFACE_MAP()
BEGIN_CONNECTION_MAP(CConnObject,CCmdTarget)
CONNECTION_PART(CConnObject,IID_IEventSink,SampleConnPoint)
END_CONNECTION_MAP()

说明:A.必须在接口映射中写入INTERFACE_PART(CConnObject,IID_IConnectionPointContainer,ConnPtContainer)以实现IConnectionPointContainer接口.注意,CCmdTarget类内嵌有才ConnPtContainer类以实现IConnectionPointContainer接口,并用m_xConnPtContainer加以记录.

B.用BEGIN_CONNECTION_MAP和END_CONNECTION_MAP宏实现连接点映射.CONNECTION_PART定义了实现连接点的类.

5.在CConnObject::CConnObject()中写入:

EnableConnections();

上一页  1 2 3 4 5  下一页

Tags:COM 对象 连接点

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