![]() |
|
![]() ![]() ![]() |
|
nikitos1980 |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 17.5.2008 Репутация: нет Всего: нет |
Помогите решить проблему с реализацией ксасса в dll
файл .h
файл .cpp
При компиляции получаю ошибку Warning 1 warning C4273: 'CSimpleObject::CSimpleObject' : inconsistent dll linkage d:\visual c++ .net\c++ .net\ex01dll\ex01dll\simpleobject.cpp 10 Warning 2 warning C4273: 'CSimpleObject::~CSimpleObject' : inconsistent dll linkage d:\visual c++ .net\c++ .net\ex01dll\ex01dll\simpleobject.cpp 14 Error 3 error LNK2019: unresolved external symbol "__declspec(dllimport) const CSimpleObject::`vftable'" (__imp_??_7CSimpleObject@@6B@) referenced in function "public: __thiscall CSimpleObject::CSimpleObject(void)" (??0CSimpleObject@@QAE@XZ) SimpleObject.obj Понимю, что компилятор не видит какой-то функции, но не могу реализовать решение. С Помогите любой инфой Спасибо |
||||
|
|||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Непонятно, при компиляции чего у тебя вылезает ошибка: самой DLL или приложения, которое ее подключает?
Из поста можно понять, что вроде речь идет от компиляции DLL, но тогда ты действительно где-то напутал с макросами: __declspec(dllimport) в этом контексте не должно встречаться, должен быть экспорт. Смысл в следующем: класс из библиотеки экспортируется, а в приложении он же импортируется. Т.е. ключевые слова при компиляции должны быть разными, когда заголовок компилируется с библиотекой и с приложением. Это достигается с помощью макроса типа AFX_EXT_CLASS: он по разному реализуется в зависимости от наличия другого макроса, AFXEXT. Последний обычно прописываютс в свойствах библиотеки (т.е. он действует при компиляции библиотеки и приводит к тому, что AFX_EXT_CLASS читается как export). А вот при компиляции хедера из библиоткеи в составе приложения AFXEXT не определен, и AFX_EXT_CLASS читается как import. Но есть одна загвоздка, о которой в MSDN написано смутно: это все работает, когда extension-библиотека ровно одна. А если их больше, и между ними есть зависимости, то одним макросом AFXEXT не обойдешься. Возможно, у тебя проблемы именно с этим: макрос не определен, должен быть импорт, а компилятор видит код, вот и ругается. Обычно для "взрослого" приложения об AFXEXT лучше вообще забыть, а определить свои макро-метки для каждой extension DLL и, соответственно, свои определения :
Это пишешь в общем хедере библиотеки, который подключается к клиентскому коду. Сообтветствено, в свойствах библиотеки прописываешь макрос _MYDLL. На тему разных AFX_EXT_CLASS, AFX_EXT_API и прочая можно не париться - это все одно и то же, хватит и одного макроса и для функций и для классов. Надеюсь, смысл понятен. -------------------- ... |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |