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 に答える