Есть a.dll в ней есть класс (описан в a.h)
template<class T>
class UTILS_DLL_CALL StrPtr{
T* p;
public:
StrPtr(const T* _p=0):p(0){assignString(p,_p);}
~StrPtr(){delete[] p;}
....
};
Есть b.dll и в ней инстанцируется этот класс
и при линковке появляются ошибки типа
b.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall StrPtr<char>::~StrPtr<char>(void)" (__imp_??1?$StrPtr@D@@QAE@XZ)
При рассмотрении могучей утилитой DUMPBIN выяснилось, что такое у нас есть:
1 0 000010A0 ??0?$StrPtr@D@@QAE@PBD@Z
2 1 00001122 ??0?$StrPtr@G@@QAE@PBG@Z
7 6 0000100F ??1?$StrPtr@G@@QAE@XZ
16 F 00001032 ??B?$StrPtr@D@@QBEPBDXZ
17 10 00001159 ??B?$StrPtr@G@@QAEPAGXZ
18 11 0000115E ??B?$StrPtr@G@@QBEPBGXZ
23 16 00001078 ??_F?$StrPtr@D@@QAEXXZ
24 17 00001104 ??_F?$StrPtr@G@@QAEXXZ
И тут меня осенило: __declspec(dllimport) не нужен в VS7.
Убрал дефайн нужный (чтоб UTILS_DLL_CALL вырождался в пустое место), и все собралось.
Вот. Пока писал вопрос -- сам нашел ответ. Кажется.
Если у кого-то возникало подобное -- ответьте.
29.07.03 17:43: Перенесено из 'C/C++'
оппа...
а вот это уже не лечится предыдущим методом (класс Color имеет статический White):
qwer.obj : error LNK2001: unresolved external symbol "public: static class LibABC::Color LibABC::Color::White" (?White@Color@RelAPI@@2V12@A)
хотя экспортируемый символ ?White@Color@RelAPI@@2V12@A в библиотеке LibABC явно присутствует:
3531 DC8 002C9168 ?White@Color@RelAPI@@2V12@A
что же делать?
помогите, кто знает!
пробовал собирать библиотеку LibABC
и так:
Color DLL_CALL Color::White(255,255,255);
и так:
Color Color::White(255,255,255);