Просто предположение:
Если вы включите заголовок из dll1 в проект dll2 и в этом заголовке вы используете __declspec(dllexport))
, вы сообщаете компоновщику, что dll2 также экспорт этих классов, которые на самом деле предназначены для импорта dll2 , поэтому отсутствует определение классов.
Так что обычно используют такое определение.
#ifdef DLL1_EXPORTS
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT __declspec(dllimport)
#endif
class DLLEXPORT A
{
//...
Эта конструкция гарантирует, что определения dll1 экспортируются при использовании заголовка в dll1 и импортируются при использовании внутри проекта dll2 . Все, что вам нужно, это макрос DLL1_EXPORT
, который будет определен при компиляции dll1 . Настройки проекта для dll1 - обычно хорошее место.
Другой подход состоит в том, чтобы иметь 2 разных заголовка, один для сборки dll1 и второй для совместного использования с dll1 lib (без каких-либо __declspec(dllexport)
).