Поделиться через


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

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

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

  • Используйте ключевые слова __declspec(dllimport) или __declspec(dllexport) в определении функции ведущего приложения.

C помощью DEF-файла

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

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

Использование __declspec

Visual C++ использует __declspec(dllimport) и __declspec(dllexport), чтобы заменить ключевое слово __export, ранее применявшееся в 16-битных версиях Visual C++.

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

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

Формат переносимого исполняемого (PE) файла Win32 разработан для уменьшения до минимума количества страниц, предназначенных для отладки импортов. Чтобы выполнить эту операцию, определите все адреса импорта под названием "Таблица с адресами импорта" в одно расположение какой-либо программы. Это позволить загрузчику модифицировать только одну или несколько страниц во время доступа к данным импортам.

Выберите действие.

См. также

Основные понятия

DLL в Visual C++