想自己写个类厂,在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

解决方案 »

  1.   

    楼主为什么要使用IMPLEMENT_DYNCREATE?这个宏是指明这个CObject的派生类支持动态创建特性(也就是通过运行时期类信息CRuntimeClass::CreateObject来创建类对象),由于用new所以需要默认构造函数。可是COleObjectFactory是必须以CLSID、COM组件实现类的类型信息(CRuntimeClass*)等信息构建一个类厂,如果使用默认构造函数,这些信息都将没有(一个未指定创建的对象的类信息和其标识CLSID的类厂是毫无意义的),所以COleObjectFactory没有缺省构造函数,所以其子类也不能实现缺省构造函数(除非象CDialog的派生类一样,如:CABDialog::CABDialog() : CDialog( IID ){})。楼主请确认自己程序的逻辑是否正常,因为COleObjectFactory是不应该有缺省构造函数的,或者楼主是否是想用IMPLEMENT_DYNAMIC?
      

  2.   

    COleObjectFactory类的mfc实现使用了这个宏,不知他是如何解决这个问题的。我现在想自己实现一个类厂,用它来实例组件,不知可行否?
      

  3.   

    楼主是否看错了?我在MFC的源码中查到的是它使用的是IMPLEMENT_DYNAMIC,不是IMPLEMENT_DYNCREATE。
    IMPLEMENT_DYNAMIC是让CObject的派生类具有运行时期类信息,以致于可以通过CObject::IsKindOf来判断派生类的类型,并不需要创建派生类的实例,所以没有上面的问题。我已经试过了,要自定义一个类厂,直接从COleObjectFactory派生一个,然后使用IMPLEMENT_DYNAMIC和DECLARE_DYNAMIC宏,重载COleObjectFactory在MSDN中指出的可重载函数来定制这个类厂即可。