![]() |
|
|
![]()
|
|
| erslgoeirjh |
|
||||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 16.12.2005 Репутация: нет Всего: нет |
Есть проект DLL--DLLIntegr, собранный в Visual Studio 2008.
В его файлах написано следующее: 1) файл DLLIntegr.h :
Реализация методов классов T3DVector и T3DMatrix произведены в файле 3dvecmat.cpp . Также в файле DLLIntegr.h определены следующие структуры и классы:
2) в файле DLLIntegr.cpp :
3) в файле dllmain.cpp :
Эта dll (DLLIntegr) нормально компилируется--создаются файлы DLLIntegr.dll и DLLIntegr.lib . Теперь я создаю вызывающую её программу--CallDLLIntegr. В проект этой программы я перебросил файл DLLIntegr.h . Файл CallDLLIntegr.cpp :
При компиляции этой вызывающей прогарммы выдаются ошибки: error LNK2019: ссылка на неразрешенный внешний символ "public:__thiscall T3DVector::T3DVector(void)"(??0T3DVector@@QAE@XZ) в функции _wmain error LNK2019: ссылка на неразрешенный внешний символ "public:__thiscall T3DVector::T3DVector(class T3DVector const&)"(??0T3DVector@@QAE@ABV0@@Z) в функции "public:__thiscall NewSatInit::NewSatInit(class NewSatInit const&)"(??0NewSatInit@@QAE@ABU0@@Z) При этом, если в файле DLLIntegr.h в структуре NewSatInit закомментировать поле T3DVector rv0[2]; , а в файле CallDLLIntegr.cpp закомментирвоать строки T3DVector rv[2]; и isat->GetCurrentVector(rv,1); , то тогда эта программа нормально компилируется. Такое ощущение, что компилятору не нравится, как описан или определён класс T3DVector. Как решить эту проблему? Как сделать так, чтобы в моей вызывающей программе CallDLLIntegr с классами T3DVector и T3DMatrix не было бы проблем? |
||||||||||
|
|||||||||||
| vol4ek |
|
|||
![]() конь в пальто ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 1.5.2011 Где: Минск Репутация: -1 Всего: 0 |
проект dll выложите
|
|||
|
||||
| erslgoeirjh |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 16.12.2005 Репутация: нет Всего: нет |
И ещё вопрос: в классе ISatellite объявлены дружественные функции INewSatellite и INewsat_integ, а в его наследнике, классе Satellite, объявлены дружественные функции NewSatellite и Newsat_integ. Эти четыре функции объявлены как __stdcall.
После исправления своей ошибки с классами T3DVector и T3DMatrix у меня компилируется программа, более того--в клиентской программе вызывается конструктор класса ISatellite, который вызывает конструктор класса Satellite, который благополучно работает. Но после этого, при загрузке адреса функции INewSatellite из библиотеки DLLIntegr.dll у меня возвращается NULL. (Функция INewSatellite вызывает функцию Satellite, а функция INewsat_integ вызывает функцию Newsat_integ). То есть у меня неправильно экспортируются функции INewSatellite, INewsat_integ, NewSatellite, Newsat_integ. Как правильно их экспортировать? Через extern "C" DLLINTEGR_API ? Но как быть тогда с дружественным объявлением этих функций в классах ISatellite, Satellite? |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |