【问题标题】:IMPLEMENT_DYNCREATE, "Use MFC in a Static Library" and inheritanceIMPLEMENT_DYNCREATE,“在静态库中使用 MFC”和继承
【发布时间】:2010-09-10 20:05:03
【问题描述】:

如果我将项目从在共享 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 声明基类的情况下解决这个问题?

谢谢。

【问题讨论】:

    标签: mfc static-linking


    【解决方案1】:

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

    IMPLEMENT_DYNCREATE(Test,CObject);
    

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

    【讨论】:

    • 所以你总是需要为基类声明/实现 dyncreate 吗?使用“共享 DLL 中的 MFC”时,如何编译/链接正常?至于原因,IMPLEMENT/DECLARE_DYNCREATE 仅适用于 CObject 派生类:msdn.microsoft.com/en-us/library/5fsfk9dy(VS.80).aspx
    • 为什么需要 dyncreate?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    相关资源
    最近更新 更多