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.
Ниже в рекомендуемом порядке использования перечислены возможные способы экспорта определения:
Ключевое слово __declspec(dllexport) в исходном коде
Оператор EXPORTS в DEF-файле
Спецификация /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) для объявления данных.