EXPORTS

Обновлен: Ноябрь 2007

Вводит раздел одного или нескольких definitions, являющихся экспортируемыми функциями или данными. Каждое определение должно находиться на отдельной строке.

EXPORTS
definitions

Заметки

Ключевое слово EXPORTS может располагаться на одной строке с первым определением или на предыдущей строке. В DEF-файле могут содержаться один или несколько операторов EXPORTS.

Синтаксис экспорта definitions:

entryname[=internalname] [@ordinal [NONAME]] [PRIVATE] [DATA]

entryname — это имя функции или переменной, которую необходимо экспортировать. Это необходимое условие. Если экспортируемое имя отличается от имени в библиотеке DLL, укажите имя экспорта в DLL с помощью internalname. Например, если DLL экспортирует функцию func1() и вы хотите, чтобы она использовалась как функция func2(), укажите:

EXPORTS
func2=func1

@ordinal позволяет указать, что не номер, а имя функции попадет в таблицу экспорта библиотеки DLL. Это позволит сократить размер DLL. LIB-файл будет содержать сопоставление между порядковым номером и функцией, что позволит использовать имя функции, как обычно, в проектах, использующих DLL.

Дополнительное ключевое слово NONAME позволяет экспортировать только порядковый номер и сократить размер таблицы экспорта в конечной библиотеке DLL. Однако, если вы хотите использовать GetProcAddress в DLL, необходимо знать порядковый номер, поскольку имя будет недействительным.

Дополнительное ключевое слово PRIVATE не допускает присутствия entryname в библиотеке импорта, созданной LINK. Оно не влияет на экспорт в образ, также созданный LINK.

Дополнительное ключевое слово DATA указывает на то, что экспорт содержит данные, а не код. Например, переменные данных можно экспортировать так:

EXPORTS
i DATA

Если для того же экспорта используются операторы PRIVATE и DATA, оператор PRIVATE должен предшествовать оператору DATA.

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

  1. Ключевое слово __declspec(dllexport) в исходном коде

  2. Оператор EXPORTS в DEF-файле

  3. Спецификация /EXPORT в команде LINK.

Все эти методы могут использоваться в одной программе. Когда программа LINK создает программу, содержащую экспорты, она также создает библиотеку импорта (если только при построении не используется EXP-файл).

Ниже приведен пример раздела EXPORTS:

EXPORTS
   DllCanUnloadNow      @1     PRIVATE   DATA
   DllWindowName = Name        DATA
   DllGetClassObject    @4 NONAME   PRIVATE
   DllRegisterServer    @7
   DllUnregisterServer

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

См. также

Ссылки

Правила для операторов определения модуля