8 / 8 / 4
Регистрация: 09.06.2013
Сообщений: 43
|
|||||||||||||||||||||||||||||||
1 | |||||||||||||||||||||||||||||||
Подключение динамической библиотеки (DLL), MSVC __declspec dllimport dllexport09.10.2016, 15:36. Просмотров 4326. Ответов 18
Метки нет Все метки)
(
Для экспортирования методов из DLL в заголовочном файле используется конструкция __declspec(dllimport) или __declspec(dllexport)
Часто вижу конструкцию вида:
Попробовал сделать свою собственную тестовую dll-ку: DynamicLibrary.proj в настройках проекта:
в настройках проекта эту библиотеку подключаю так
Вопрос, в каких случаях нужно определять диррективу DLL_EXPORT, и кто ее должен определять? Тот кто линкуется c DLL? хотя я ее нигде не определил и работает (может слишком простой проект? как его усложнить, чтобы почувстовать разницу?)
0
|
|
09.10.2016, 15:36 | |
Подключение динамической библиотеки Создание динамической библиотеки (dll) в Dev C++ Вызов функции одной динамической библиотеки из другой динамической библиотеки Подключение dll библиотеки |
|
![]() |
|
09.10.2016, 15:43 | 2 |
DLL_EXPORT нужна что бы переключать dllexport/dllimport в зависимости куда был включен заголовочный файл библиотеки в программу или cpp. dll-ки. Он(дефайн) может по разному называться, и определятся автоматически в шаблонах проекта.
Программы собираемые другими компиляторами не смогу использовать классы из вашей либы, учтите это.
1
|
8 / 8 / 4
Регистрация: 09.06.2013
Сообщений: 43
|
|
09.10.2016, 15:43 [ТС] | 3 |
0
|
8 / 8 / 4
Регистрация: 09.06.2013
Сообщений: 43
|
|
09.10.2016, 15:46 [ТС] | 5 |
Это с добавлением extern "C" перед ними?
0
|
8 / 8 / 4
Регистрация: 09.06.2013
Сообщений: 43
|
|
09.10.2016, 15:49 [ТС] | 7 |
Дефайн этот я нигде не определял самостоятельно, ни в проекте dll-ки, ни в проекте exe-шника. Все еще не понял кто ее определил. Студия за меня его определила?
0
|
8 / 8 / 4
Регистрация: 09.06.2013
Сообщений: 43
|
||||||||||||||||
09.10.2016, 16:19 [ТС] | 9 | |||||||||||||||
Попробовал включить вывод препроцессинга в файл, чтоб посмотреть, что получиться:
С/C++->Preprocessor->Process to a file: Yes(/P) LibraryClass.i
0
|
8 / 8 / 4
Регистрация: 09.06.2013
Сообщений: 43
|
|
09.10.2016, 16:22 [ТС] | 10 |
Еще сейчас заметил в настройках проекта DLL, что там есть такой дефайн: _WINDLL.
Может вы про него говорите?
0
|
![]() |
|
09.10.2016, 16:31 | 11 |
Значит утверждение ошибочно.
Добавлено через 1 минуту Возможно, я не знаю как MSVC он называется, в С++Builder это __DLL__ Добавлено через 5 минут Попробуйте заменить DLL_EXPORT на _WINDLL и проверить еще раз.
0
|
8 / 8 / 4
Регистрация: 09.06.2013
Сообщений: 43
|
|
09.10.2016, 16:37 [ТС] | 12 |
0
|
8 / 8 / 4
Регистрация: 09.06.2013
Сообщений: 43
|
||||||||||||||||
09.10.2016, 16:39 [ТС] | 13 | |||||||||||||||
Заменил
после обычного запуска (не Rebuild), основной проект собирается и все запускается
0
|
8 / 8 / 4
Регистрация: 09.06.2013
Сообщений: 43
|
|
09.10.2016, 16:45 [ТС] | 15 |
0
|
![]() |
||||||
09.10.2016, 16:45 | 16 | |||||
Ошибка в кривых руках. Возьмите скачайте программу PE Explorer и откройте ею DLL и посмотрите таблицу экспорта- она скорее всего будет пустой.
0
|
8 / 8 / 4
Регистрация: 09.06.2013
Сообщений: 43
|
|
09.10.2016, 16:50 [ТС] | 17 |
подключено в настройках, в секции Linker->Input->Additional Dependencies
Что не так? Добавлено через 1 минуту Хорошо, попробую
0
|
Ушел с форума
![]() |
|
09.10.2016, 16:57 | 18 |
Добавлю на всякий случай: для переносимости между компиляторами объявления
также должны использовать совместимые выравнивания и размеры типов.
0
|
![]() |
|
09.10.2016, 17:09 | 19 |
0
|
09.10.2016, 17:09 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь. Подключение dll библиотеки Подключение Dll библиотеки, вылетает программа
Подключение библиотеки DLL на C++ через DllImport Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |