Войти

Показать полную графическую версию : Unresolved external при линковке .DLL


Kelasant
15-03-2005, 18:43
Всем привет!
Я решил написать DLL. Начало было удачным, тестовая функция с примером сложения двух чисел пошла на ура.
Потом я использовал некоторые компоненты в функции — создание, использование и удаление.
(Это был компонент Indy: TIdTCPClient)
И беда случилась при линковке:

[Linker Error] Unresolved external 'Idtcpclient::TIdTCPClient::' referenced from D:\PROJECTS\CONNECT\CLIENT.OBJ
[Linker Error] Unresolved external '__fastcall Idtcpclient::TIdTCPClient::TIdTCPClient(Classes::TComponent *)' referenced from D:\PROJECTS\CONNECT\CLIENT.OBJ


Аналогично шла ругань по поводу использования строк.


Причем пока я не написал в .h файле строки типа

int __declspec(dllexport) __cdecl CreateClient(void* Client, char* RemoteHost, int RemotePort);

то компилировался и линковался проект без проблем, поскольку в .cpp были соответствующие инклуды #include <IdTCPClient.hpp>.

Как сделать, чтобы линкер находил и резолвил для .dll все, что надо?
Потому как в обычной ехе-программе все было бы ок.

Kelasant
15-03-2005, 20:35
я обнаружил, что если стоят галочки "build with runtime pakages" и "use dinamic rtl", то компиляция и линковка на ура. если убрать галочки, то выходят эти ошибки. но зачем мне это в уже готовой длл? я ж не буду с собой таскать кучу билдеровских файлов?!

Kelasant
16-03-2005, 18:14
Текущие проблемы решены таким образом:

Я создал проект DLL wizard.
Потом написал код с использованием нужных мне компонент.
Далее просто добавил нужные .obj файлы в проект, которые поочередно требовались при компиляции и линковке.
И галочки "build with runtime pakages" и "use dinamic rtl" отключены, конечно же.
Проверил - работает, моя dll создала соединение с Indy-сервером, приняла и передала данные.

Потом проверю, как эта dll будет работать в программе на Visual C++.
Надеюсь, проблем уже не будет..........

Всем спасибо :)




© OSzone.net 2001-2012