IMPLEMENT_DYNCREATE,“在静态库中使用MFC”和继承

时间:2010-09-07 08:33:00

标签: mfc static-linking

如果我在共享DLL中使用MFC切换我的项目以在静态库中使用MFC,则以下代码将无法编译:

class Test : public CObject
{
public:
    //DECLARE_DYNCREATE(Test); // If I uncomment this line, it works
};

class Test2 : public Test
{
public:
    DECLARE_DYNCREATE(Test2);
};

IMPLEMENT_DYNCREATE(Test2, Test); // <-- error C2039: 'classTest' : is not a member of 'Test'

但是,如果我取消注释DECLARE_DYNCREATE(测试),它可以工作。我在文档中找不到任何说基类必须使用DECLARE_DYNCREATE,或者静态链接或共享链接之间存在差异。

问题是我有一些不使用DYNCREATE宏的第三方代码。有没有人知道为什么静态链接时需求不同,如果有办法解决这个问题而不用DECLARE_DYNCREATE声明基类?

感谢。

1 个答案:

答案 0 :(得分:2)

如果你使用IMPLEMENT_DYNCREATE,那么你也需要它的伴侣DECLARE_DYNCREATE。在示例中,您必须使用带有class和base_class的工具:

IMPLEMENT_DYNCREATE(Test,CObject);

但我想知道你是否需要动态创建一个CObject派生类。有什么理由吗?