IMPLEMENT_DYNCREATE, «Использовать MFC в статической библиотеке» и наследование - PullRequest
1 голос
/ 07 сентября 2010

Если я переключу свой проект с использования MFC в общей библиотеке DLL на использование 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?

Спасибо.

1 Ответ

2 голосов
/ 10 сентября 2010

Если вы используете IMPLEMENT_DYNCREATE, вам нужен его компаньон DECLARE_DYNCREATE.И вы должны использовать реализацию с class и base_class, в вашем примере:

IMPLEMENT_DYNCREATE(Test,CObject);

Но мне интересно, нужно ли вообще динамическое создание для класса, производного от CObject.Есть причина для этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...