Я хочу определить производный класс на основе экспортированного класса dll. Базовый класс определен в проекте A, а производный класс - в проекте B.
Во-первых, в проекте A определяется препроцессор MYDLL_BUILD. И я использую файл заголовка для указания экспорта/импорта:
#if !defined(MYDLL_BUILD)
# pragma comment(lib, "myDll.lib")
#endif
#if defined(MYDLL_BUILD)
# define MYDLL_API __declspec(dllexport)
#else
# define MYDLL_API __declspec(dllimport)
#endif
Затем я определяю базовый класс:
class MYDLL_API DllObject
{
public:
virtual ~DllObject() {}
protected:
DllObject() { m_count = 3; }
private:
int m_count;
};
В проекте B препроцессор MYDLL_BUILD не определен. Вот производный класс:
class MyClass : public DllObject
{
public:
~MyClass(){}
MyClass() { m_data = 20; }
private:
int m_data;
};
Я включил файл dll и lib, но все же получаю неразрешенную ошибку внешнего символа:
2>Test_Entry.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall ADAI::DllObject::~DllObject(void)" ([email protected]@@[email protected]) referenced in function "public: virtual __thiscall MyClass::~MyClass(void)" ([email protected]@[email protected])
2>Test_Entry.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) protected: __thiscall ADAI::DllObject::DllObject(void)" ([email protected]@@[email protected]) referenced in function "public: __thiscall MyClass::MyClass(void)" ([email protected]@[email protected])
2>c:\Users\Adai\Documents\Visual Studio 2010\Projects\Test_Main\Debug\Test_Main.exe : fatal error LNK1120: 2 unresolved externals
Я искал в Интернете, большинство ответов утверждают, что lib отсутствует. Но эти инструкции не решают мою проблему.
Когда я меняю
class MYDLL_API DllObject
к
class __declspec(dllexport) DllObject
Решение компилируется без ошибок. Я действительно не понимаю причину. Кто-то может помочь? Заранее спасибо.