二.声明组件类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宏的两个参数分别是实现组件对象的类和实现接口的嵌套类。
说明:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
2/2 首页 上一页 1 2 |