服务器端的 com创建(三)

 

仔细看了下ATL,一直想知道,明明我写com的时候根本没有写这个什么类厂啊,
怎么就可以通过类厂来创建一个com对象实例,

原因就是CComCoClass中间有这个一个宏DECLARE_CLASSFACTORY,这个宏别的不干,
就是来建立类厂的,

它会做这么一个声明
#define DECLARE_CLASSFACTORY_EX(cf) typedef ATL::CComCreator< ATL::CComObjectCached< cf > > _ClassFactoryCreatorClass;

cf在是什么
#define DECLARE_CLASSFACTORY() DECLARE_CLASSFACTORY_EX(ATL::CComClassFactory)
cf就是我们的类厂的真正原因
它就是ATL::CComClassFactory
直接使用这个CComCreator的CreateInstance方法直接放入那个OBJECT_ENTRY_AUTO宏定义的结构中的
那么pfnGetClassObject中就可以了,
也就是说,pfnGetClassObject实际是ATL::CComCreator< ATL::CComObjectCached< ATL::CComClassFactory > >的CreateInstance函数,

但不同的类厂怎么会是一样的呢,
问题就在于这个类厂类中有个_ATL_CREATOFUNC指针,这个指针是会在CComCreator在调用SetVoid的时候把
我们自己创建类的CComCreater的CreateInstance 放入,这样,这个类厂就自己和指定类的创建挂钩了,
nb啊,命令模式用的这么nb啊。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值