如果我在共享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声明基类?
感谢。
答案 0 :(得分:2)
如果你使用IMPLEMENT_DYNCREATE
,那么你也需要它的伴侣DECLARE_DYNCREATE
。在示例中,您必须使用带有class和base_class的工具:
IMPLEMENT_DYNCREATE(Test,CObject);
但我想知道你是否需要动态创建一个CObject派生类。有什么理由吗?