关于DECLARE_OLECREATE和IMPLEMENT_OLECREATE

clicksoft 2006-01-05 04:28:33
为什么我在有的以mfc方式实现com的代码中看见一些实现某一接口的类声明和使用了DECLARE_OLECREATE和IMPLEMENT_OLECREATE

但同一个工程中实现另外一些接口的类里不包含这些东西


请问包含和不包含有什么区别

谢谢
...全文
221 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
clicksoft 2006-01-09
  • 打赏
  • 举报
回复
ding
loverx 2006-01-06
  • 打赏
  • 举报
回复
我觉得无论是用MFC写COM,还是用ATL写COM
最基本的DECLARE_OLECREATE,BEGIN_OBJECT_MAP......BEGIN_INTERFACE_MAP
既类厂是如何创建的,接口是如何被查询到的

在学习的过程中最好有所了解
clicksoft 2006-01-06
  • 打赏
  • 举报
回复
handsomerun 2006-01-05
  • 打赏
  • 举报
回复
呵呵,这是mfc经常干的一些小伎俩
一组宏定义而已,呵呵


包含了他们,
就是支持动态创建



类厂的由来



不用说,COM对象的创建是需要类厂的.

---------------------------------------------------------------------------------------------------------

DECLARE_OLECREATE(CSAM)宏剖析

-----------------------------------------------------------------------------

#define DECLARE_OLECREATE(class_name) \

public: \

static AFX_DATA COleObjectFactory factory; \

//定义类厂对象…

static AFX_DATA const GUID guid; \

//组件类的GUID



------------------------------------------------------------------------------------------------------------

IMPLEMENT_OLECREATE 宏剖析

------------------------------------------------------------------

#define IMPLEMENT_OLECREATE(class_name, external_name, l, w1, w2, b1,\

b2, b3, b4, b5, b6, b7, b8) \

AFX_DATADEF COleObjectFactory class_name::factory(class_name::guid, \

RUNTIME_CLASS(class_name), FALSE, _T(external_name)); \

//这里要注意的是external_name:ProgID

AFX_COMDAT const AFX_DATADEF GUID class_name::guid = \

{ l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }; \

//将组件类的CLSID赋予组件类的成员变量guid.

-----------------------------------------------------------------------------------------------------------

IMPLEMENT_OLECREATE(CSAM, "MFCCOM.SAM",

0x43d242f9, 0x4f7e, 0x4cbb, 0xae, 0xda, 0x77, 0x8d, 0xa1, 0x16, 0xd0, 0xd9)

说明:我们知道,在创建组件类对象时,首先由App核心获得当前状态,

从中取出类厂表,依据CLSID获得相应的类厂对象指针.正是在这里

将类厂和CLSID、ProID等信息关联.

aspnetwuxueyou 2006-01-05
  • 打赏
  • 举报
回复
是否支持动态创建

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧