EXPORTS

Вводит раздел одного или нескольких 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) для объявления данных.

См. также

Ссылки

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