在VC++6.0中用MFC进行COM编程(2)
二.声明组件类CTimeLogServer和实现接口的嵌套类
在ClassWizard中添加新类CTimeLogServer,其基类选择为CCmdTarget.修改其头文件TimeLogServer1.h,加上#include ";ITimeLogServer.h";;同时在类声明体中加上
//声明实现ITimelog接口的嵌套类
BEGIN_INTERFACE_PART(TimeLog,ITimeLog)//自动声明IUnknown接口的三个方法
STDMETHOD(OutputLog)(BSTR* varLogText);
END_INTERFACE_PART(TimeLog)
//声明接口映射
DECLARE_INTERFACE_MAP()
//声明类厂
DECLARE_OLECREATE(CTimeLogServer)
三.实现类厂和接口映射
在CTimeLogServer的实现文件中写入:
//实现类厂
IMPLEMENT_OLECREATE(CTimeLogServer,";TimeLogServer";,
0xa433e701, 0xe45e, 0x11d3, 0x97, 0xb5, 0x52, 0x54, 0x4c, 0xba, 0x7f, 0x28);
//映射接口到相应的嵌套类
BEGIN_INTERFACE_MAP(CTimeLogServer,CCmdTarget)
INTERFACE_PART(CTimeLogServer,IID_ITimeLog,TimeLog)
END_INTERFACE_MAP()
四.在组件的构造和析构函数中对全局对象计数
CTimeLogServer::CTimeLogServer()
{
::AfxOleLockApp();
}
CTimeLogServer::~CTimeLogServer()
{
::AfxOleUnlockApp();
}
五.为嵌套类实现IUnknown接口
//为嵌套类而实现IUnknown接口
STDMETHODIMP_(ULONG)
CTimeLogServer::XTimeLog::AddRef()
{
METHOD_PROLOGUE(CTimeLogServer,TimeLog)
return pThis->;ExternalAddRef();
}
STDMETHODIMP_(ULONG)
CTimeLogServer::XTimeLog::Release()
{
METHOD_PROLOGUE(CTimeLogServer,TimeLog)
return pThis->;ExternalRelease();
}
STDMETHODIMP
CTimeLogServer::XTimeLog::QueryInterface(REFIID riid,void**ppvObj)
{
METHOD_PROLOGUE(CTimeLogServer,TimeLog)
return pThis->;ExternalQueryInterface(&;riid,ppvObj);
}
说明:虽然CCmdTarget类已经实现了IUnknown接口,但是还必须通过上述代码来将嵌套类的IUnknown映射到CCmdTarget支持的IUnknown接口.METHOD_PROLOGUEH宏的两个参数分别是实现组件对象的类和实现接口的嵌套类。