用ATL和MFC来创建ActiveX控件

http://tech.ddvip.com   2007年03月30日    社区交流

本文详细介绍用ATL和MFC来创建ActiveX控件

  MFC使用嵌套的类复合策略来实现COM接口。在MFC中,想实现COM 接口的类是从CcmdTarget中派生的。每个由CcmdTarget派生出的类实现的接口得到它自己的嵌套类。MFC使用宏BEGIN_INTERFACE_PART和END_INTERFACE_PART来产生嵌套类。

  最后,MFC实现了表驱动的QueryInterface。MFC的接口映射的工作机理同它的消息映射基本相同:MFC的消息映射把一个Windows消息和一个C++类中的函数相联系;MFC的接口映射把一个接口的GUID和一个表示此接口的特定的vptr的地址相联系。每个基于CcmdTarget的类实现COM接口通过更多的宏:DECLARE_INTERFACE_MAP, BEGIN_INTERFACE_MAP, INTERFACE_PART,和 END_INTERFACE_MAP来增加一个接口映射。

  为了理解这些宏在实际中是什么样子的,请看图1,它说明了实现ActiveX控件,COleControl 的MFC类。当你细读代码时,注意ColeControl带有夹在一对BEGIN_INTERFACE_PART 和 END_INTERFACE_PART宏之间的每个接口的签名,还要注意ColeControl的接口映射表有22个条目。

  除了实现了Iunknown接口,MFC还包括IclassFactory的一个标准实现。再一次,MFC通过若干宏提供了此支持。MFC有两个宏来提供类对象:DECLARE_OLECREATE_EX 和 IMPLEMENT_OLECREATE_EX.。在一个基于CcmdTarget的类中使用这些宏增加一个ColeObjectFactory类型的静态成员到该类中。如果你看一下AFXDISP.H中 ColeObjectFactory的定义,你将会看到用在COleObjectFactory 中的MFC的嵌套类宏为实现IClassFactory2定义了一个嵌套类。IClassFactory::CreateInstance的MFC版本使用MFC的动态创建机制(DECLARE_DYNCREATE 和 IMPLEMENT_DYNCREATE宏打开此功能)来实例化COM类,因此买入MFC的COM支持同样意味着买入它的动态创建机制。

责编:豆豆技术应用

正在加载评论...