如果我将项目从在共享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声明基类的情况下解决这个问题?
谢谢。
发布于 2010-09-10 20:05:03
如果你使用IMPLEMENT_DYNCREATE,你也需要它的伴生DECLARE_DYNCREATE。在您的示例中,您必须使用带有类和base_class的实现:
IMPLEMENT_DYNCREATE(Test,CObject);但是我想知道您是否需要为CObject派生类动态创建。这有什么原因吗?
https://stackoverflow.com/questions/3657037
复制相似问题