![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
arfaa |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 2.10.2012 Репутация: нет Всего: нет |
Здравствуйте,хочу экспортировать функцию с помощью .def файла, с помощью extern "C" _declspec..... экспортировал успешно, хочу реализовать теперь другим способом. Вот мои последовательные действия, где накосячил, подскажите пожалуйста, так как в интеренете везде пишется по разному, начиная от имени dll-ки в def файле и заканчивая обращением к функции в самом проекте.
1. Создаю обычный проект console win32. 2. Создаю библиотеку console win32->DLL->Export Symbols 3. В хидаре библиотеке: /dll.h
4.cpp-ник: /dll.cpp
5. Получаю dll.dll и помещаю в папку с проектом 6. Создаю .def файл /dll.def LIBRARY "dll.dll" EXPORTS summa @1 //(пробовал и просто summa без @1) 7. Помещаю dll.def так же в папку с проектом 8. Код самого проекта
Так же интересует вопрос экспортирования класса,а не отдельной функции. Импортировать класс у меня не получилось ни декларирование ни .def файлом. Спасибо за внимание! Модератор: не забываем пользоваться кнопочкой "Код" |
||||||
|
|||||||
bsa |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
экспортировать класс, а потом подгружать через LoadLibrary у тебя не выйдет. с автоматической загрузкой dll.
Чтобы проблем не было используй атрибуты __dllexport и __dllimport: /dll.h
/dll.cpp
|
||||||
|
|||||||
YDean |
|
|||
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 7.9.2009 Репутация: нет Всего: 1 |
при создании dll у линкера ключик должен быть /def:dll.def
и в dll.def после слова EXPORTS перевод строки перед именами функций Это сообщение отредактировал(а) YDean - 11.10.2012, 11:31 |
|||
|
||||
arfaa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 2.10.2012 Репутация: нет Всего: нет |
В DLL.DLL в заголовочном файле после строчки #define DLL_h добавил строчку #pragma comment(linker,"/def:DLL.def") и соответственно в def файле exports переход на новую строчку /def:dll.def summa @1 в итоге все равно не работает, не видит функции сумма, поправь , если где ошибся, заранее спасибо!
|
|||
|
||||
YDean |
|
|||
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 7.9.2009 Репутация: нет Всего: 1 |
выражение
summa @1 означает, что функция будет экспортироваться не по имени, а по ординалу с номером 1. Для экспорта по имени достаточно оставить только имя в def-файле. Посмотреть, какие функции экспортирует dll, можно посредством утилиты depends.exe из студии. |
|||
|
||||
arfaa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 2.10.2012 Репутация: нет Всего: нет |
Убрал из деф файла @1, но результат не изменился...
|
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
||||
|
||||
arfaa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 2.10.2012 Репутация: нет Всего: нет |
Да ставил в библиотеке перед функцией в срр и в h файлах extern "c",хотя не понимаю назначение, если я использую все модули с++, но в любом случае результат отрицательный
|
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
||||
|
||||
arfaa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 2.10.2012 Репутация: нет Всего: нет |
http://www.fayloobmennik.net/2273531 - полностью проект для библиотеки DLL
http://www.fayloobmennik.net/2273535 - проект, куда подключается данная библиотека Жду поправок и замечаний. Это сообщение отредактировал(а) arfaa - 14.10.2012, 14:45 |
|||
|
||||
vol4ek |
|
||||||
![]() конь в пальто ![]() ![]() Профиль Группа: Участник Сообщений: 304 Регистрация: 1.5.2011 Где: Минск Репутация: нет Всего: 0 |
приложение
в dll.h
в dll.cpp
|
||||||
|
|||||||
arfaa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 2.10.2012 Репутация: нет Всего: нет |
смысл мне писать __declspec(dllexport), если я делаю с def файлом?Предложенный тобой код я делал без def файла,да,он абсолютно рабочий, но декларирование,насколько я понимаю и осуществляется с помощью def файла.Иначе смысл def файла,если я говорю внутри def файла, что будет декларировано внутри библиотеки?
Это сообщение отредактировал(а) arfaa - 14.10.2012, 17:11 |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
dll.def должен лежать в папке с проектом dll, а не simpl ! И для начала подключите его через проект, а не через #pragma comment (для надежности) |
|||
|
||||
arfaa |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 2.10.2012 Репутация: нет Всего: нет |
Теперь даже библиотеку получить не могу. Кинул def файл в проект библиотеки,далее в самой студии в настройках проекта project->properties->configuration properties->linker->module definition file в этой строчке тупо прописал DLL.def применить и f7 . Fatal error lnk1118: syntax error in 'summa' statement. Что снова не так?
|
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |