2

如果我将项目从在共享 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(Test),它会起作用。我在文档中找不到任何内容说基类必须使用 DECLARE_DYNCREATE,或者静态链接或共享链接之间存在差异。

问题是我有一些不使用 DYNCREATE 宏的第三方代码。有谁知道为什么静态链接时要求会有所不同,以及是否有办法解决这个问题而无需使用 DECLARE_DYNCREATE 声明基类?

谢谢。

4

1 回答 1

3

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

IMPLEMENT_DYNCREATE(Test,CObject);

但我想知道您是否需要为 CObject 派生类动态创建。这有什么原因吗?

于 2010-09-10T12:05:03.343 回答