![]() |
Unresolved external при линковке .DLL
Всем привет!
Я решил написать 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 все, что надо? Потому как в обычной ехе-программе все было бы ок. |
я обнаружил, что если стоят галочки "build with runtime pakages" и "use dinamic rtl", то компиляция и линковка на ура. если убрать галочки, то выходят эти ошибки. но зачем мне это в уже готовой длл? я ж не буду с собой таскать кучу билдеровских файлов?!
|
Текущие проблемы решены таким образом:
Я создал проект DLL wizard. Потом написал код с использованием нужных мне компонент. Далее просто добавил нужные .obj файлы в проект, которые поочередно требовались при компиляции и линковке. И галочки "build with runtime pakages" и "use dinamic rtl" отключены, конечно же. Проверил - работает, моя dll создала соединение с Indy-сервером, приняла и передала данные. Потом проверю, как эта dll будет работать в программе на Visual C++. Надеюсь, проблем уже не будет.......... Всем спасибо :) |
Время: 21:32. |
Время: 21:32.
© OSzone.net 2001-