Импортирование и экспортирование

Импортировать открытые символы в приложение или экспортировать функции из библиотеки DLL можно двумя способами:

  • с помощью файла определения модуля (DEF) при сборке библиотеки DLL;

  • с помощью ключевых слов __declspec(dllimport) или __declspec(dllexport) в определении функции в основном приложении.

Использование файла DEF

Файл определения модуля (DEF) — это текстовый файл, содержащий один или несколько операторов модуля, описывающих различные атрибуты библиотеки DLL. Если вы не используете ключевое слово __declspec(dllimport) или __declspec(dllexport) для экспорта функций библиотеки DLL, то для библиотеки DLL требуется DEF-файл.

DEF-файлы можно использовать для импорта в приложение или экспорта из библиотеки DLL.

Использование ключевого слова __declspec

Чтобы код компилировался правильно, использовать ключевое слово __declspec(dllimport) необязательно, но оно позволяет компилятору создавать более качественный код. Происходит это потому, что компилятор может определить, существует ли функция в библиотеке DLL или нет, и создать код без косвенного обращения, которое обычно присутствует в вызове функции, происходящем через границу библиотеки DLL. Однако для импорта переменных, используемых в библиотеке DLL, необходимо применять __declspec(dllimport).

При наличии надлежащего раздела EXPORTS в файле DEF ключевое слово __declspec(dllexport) не требуется. Ключевое слово __declspec(dllexport) было добавлено для упрощения экспорта функций из EXE- или DLL-файла без использования файла DEF.

Формат переносимых исполняемых файлов Win32 предназначен для сведения к минимуму числа страниц для фиксации импорта. Для этого все адреса импорта для любой программы помещаются в одном месте, которое называется таблицей адресов импорта. Это позволяет загрузчику при обращении к импортируемым функциям изменять только одну или две страницы.

Что вы хотите сделать?

См. также

Создание библиотек DLL на C и C++ в Visual Studio