Четвертый BORLAND С++ и его окружение

Экспорт и импорт функций


Чтобы сделать функции DLL доступными для других приложений

(.EXE или других DLL), имена функций должны экспортироваться.

Чтобы использовать экспортированные функции, нужно импортировать

их мена. Экспорт функций выполняется двумя способами:

  • Создается файл определения модуля с секцией EXPORTS, в которой перечисляются все функции, используемые в других

    приложениях. Это можно сделать с помощью инструментального

    средства IMPDEF.

  • Перед именем каждой функции DLL, которая должна экспортироваться, можно указать ключевое слово _export (в определении функции). Кроме того, при построении или компоновке

    DLL в IDE нужно выбрать корректный параметр генерации кода

    или задать корректную командную строку компилятора.

  • Чтобы функция могла импортироваться другим приложением или

    DLL, она должна описываться как экспортируемая из DLL. Вы должны

    также указать компоновщику, что хотите импортировать эти функции.



    Это можно сделать тремя способами:

  • Добавить в файл определения модуля секцию IMPORT и перечислить в ней каждую функцию DLL, которую будет использовать данный модуль.
  • Включить библиотеку импорта при компоновке модуля. IMPLIB

    позволяет создать библиотеку импорта для одной или более

    DLL.

  • Можно определить функцию с помощью ключевого слова _import

    (только для 32-разрядных приложений).

  • Функции DLL не компонуются непосредственно с приложением

    Windows. Они вызываются на этапе выполнения. Это означает, что

    такие функции должны иметь дальний тип вызова (так как DLL будет

    иметь другой сегмент кода). Используемые функцией DLL данные также должны иметь дальний тип.

    Чтобы функцию можно было использовать в приложении, она

    должна также компилироваться как доступная для экспорта и затем

    экспортироваться. Для этого вы можете скомпилировать DLL так,

    чтобы все функции в ней были экспортируемыми (параметр -WD), и

    указать перед ними ключевое слово _export.

    Если вы компилируете DLL с большой моделью памяти (дальний

    код, дальне данные), то вам не нужно явным образом определять в

    DLL дальний тип функции или ее данных.



    Содержание раздела