如何从COleObjectFactory继承子类?

powercy 2003-12-26 07:24:13
想自己写个类厂,在vc下新建一个类,但是mfc的基类选项中没有
COleObjectFactory类。我手工继承后出错很多,难度很大。

1。先问一下如何让我的子类vc自动继承COleObjectFactory。

2。如果不行的话,手动时如何解决以下问题。

IMPLEMENT_DYNCREATE宏中
#define IMPLEMENT_DYNCREATE(class_name, base_class_name) \
CObject* PASCAL class_name::CreateObject() \
{ return new class_name; }

其中new class_name需要有默认的构造函数,我声明一个没用。
error C2512: 'COleObjectFactory' : no appropriate default constructor available
...全文
42 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
powercy 2003-12-29
  • 打赏
  • 举报
回复
COleObjectFactory类的mfc实现使用了这个宏,不知他是如何解决这个问题的。

我现在想自己实现一个类厂,用它来实例组件,不知可行否?
lop5712 2003-12-29
  • 打赏
  • 举报
回复
楼主是否看错了?我在MFC的源码中查到的是它使用的是IMPLEMENT_DYNAMIC,不是IMPLEMENT_DYNCREATE。
IMPLEMENT_DYNAMIC是让CObject的派生类具有运行时期类信息,以致于可以通过CObject::IsKindOf来判断派生类的类型,并不需要创建派生类的实例,所以没有上面的问题。

我已经试过了,要自定义一个类厂,直接从COleObjectFactory派生一个,然后使用IMPLEMENT_DYNAMIC和DECLARE_DYNAMIC宏,重载COleObjectFactory在MSDN中指出的可重载函数来定制这个类厂即可。
lop5712 2003-12-27
  • 打赏
  • 举报
回复
楼主为什么要使用IMPLEMENT_DYNCREATE?这个宏是指明这个CObject的派生类支持动态创建特性(也就是通过运行时期类信息CRuntimeClass::CreateObject来创建类对象),由于用new所以需要默认构造函数。可是COleObjectFactory是必须以CLSID、COM组件实现类的类型信息(CRuntimeClass*)等信息构建一个类厂,如果使用默认构造函数,这些信息都将没有(一个未指定创建的对象的类信息和其标识CLSID的类厂是毫无意义的),所以COleObjectFactory没有缺省构造函数,所以其子类也不能实现缺省构造函数(除非象CDialog的派生类一样,如:CABDialog::CABDialog() : CDialog( IID ){})。

楼主请确认自己程序的逻辑是否正常,因为COleObjectFactory是不应该有缺省构造函数的,或者楼主是否是想用IMPLEMENT_DYNAMIC?

3,245

社区成员

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

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