MFC COM开发:嵌套类实现IUnknown

需积分: 12 69 下载量 18 浏览量 更新于2024-08-18 收藏 447KB PPT 举报
"这篇内容主要讨论了在MFC中如何使用嵌套类来实现COM组件中的IUnknown接口成员函数,特别是在开发COM组件时的关键技术。文章由潘爱民撰写,发表于2002年11月15日,旨在介绍COM开发的基础知识,包括Win32SDK和MFC对COM的支持,以及如何使用MFC和ATL开发COM组件。" 在COM(Component Object Model)开发中,`IUnknown`是所有COM接口的基础,它提供了`QueryInterface`、`AddRef`和`Release`这三个核心方法,用于接口查询、引用计数管理和对象的生命周期管理。在MFC(Microsoft Foundation Classes)框架中,开发COM组件时通常会遵循特定的模式来实现这些成员函数。 在给出的代码片段中,`CDictionary::XDictionary`是一个嵌套类,它实现了`IUnknown`接口。`QueryInterface`方法是`IUnknown`接口的核心部分,用于获取对象支持的其他接口。在这里,`STDMETHODIMP_(ULONG) CDictionary::XDictionary::QueryInterface`方法的实现使用了`METHOD_PROLOGUE_EX_(CDictionary, Dictionary)`宏,这个宏通常是MFC中用来设置上下文信息的,以便调用外部的成员函数。接下来,`pThis->ExternalQueryInterface (iid, ppvObj)`调用了外部的`QueryInterface`函数,这是MFC为了简化COM接口实现提供的一个帮助器函数。 `ExternalQueryInterface`是MFC COM对象的常规实现,它负责根据传入的`iid`查询相应的接口,并返回指向该接口的指针。如果对象支持请求的接口,`AddRef`会被调用来增加对象的引用计数,然后返回接口指针;如果不支持,则返回错误代码。 在COM开发中,`Win32SDK`提供了基础的支持,包括COM库函数、头文件(如`Unknwn.h`、`Wtypes.h`、`Objidl.h`、`Comdef.h`和`ObjBase.h`)以及接口描述的宏。例如,`DECLARE_INTERFACE_(IClassFactory, IUnknown)`宏用于声明一个从`IUnknown`派生的新接口`IClassFactory`。 `MFC`则进一步简化了COM组件的开发,它提供了类库来封装COM的底层细节,使得开发者可以更加专注于业务逻辑,而不是底层的接口实现。而`ATL(Active Template Library)`则更进一步,通过模板和宏减少了大量代码,使得创建高效、轻量级的COM组件成为可能。 MFC中的COM开发涉及到了面向对象设计、接口编程和引用计数等概念,使用嵌套类来实现`IUnknown`接口成员函数是其中的一个常见实践。理解并熟练掌握这些技术对于进行有效的COM组件开发至关重要。