/EXPORT (экспортирует функцию)
Экспортирует функцию по имени или порядку или данным из программы.
Синтаксис
/EXPORT:entryname[,@ordinal[,NONAME]][,DATA]
Замечания
Параметр /EXPORT указывает функцию или элемент данных для экспорта из программы, чтобы другие программы могли вызывать функцию или использовать данные. Экспорты обычно определяются в библиотеке DLL.
Имя записи — это имя функции или элемента данных, так как оно должно использоваться вызывающей программой. Порядковый номер указывает индекс в таблицу экспорта в диапазоне от 1 до 65 535; если не указать порядковый номер, LINK назначает один. Ключевое слово NONAME экспортирует функцию только в виде порядкового номера без имени записи.
Ключевое слово DATA указывает, что экспортируемый элемент является элементом данных. Элемент данных в клиентской программе должен быть объявлен с помощью экстерна __declspec(dllimport).
Существует четыре метода экспорта определения, перечисленные в рекомендуемом порядке использования:
__declspec(dllexport) в исходном коде
Инструкция EXPORTS в ФАЙЛЕ DEF
Спецификация /EXPORT в команде LINK
Директива комментария в исходном коде формы
#pragma comment(linker, "/export: definition ")
.
Все эти методы можно использовать в одной программе. При создании программы, содержащей экспорт, ссылка также создает библиотеку импорта, если в сборке не используется файл .exp.
LINK использует декорированные формы идентификаторов. Компилятор украшает идентификатор при создании файла .obj. Если имя записи указано компоновщику в неоценённой форме (как показано в исходном коде), LINK пытается сопоставить имя. Если не удается найти уникальное совпадение, LINK выдает сообщение об ошибке. Используйте средство DUMPBIN, чтобы получить украшенную форму имени идентификатора, когда необходимо указать его компоновщику.
Примечание.
Не указывайте декорированную форму идентификаторов C, объявленных __cdecl
или __stdcall
.
Если необходимо экспортировать несоответствующее имя функции и иметь разные экспорты в зависимости от конфигурации сборки (например, в 32-разрядных или 64-разрядных сборках), для каждой конфигурации можно использовать разные файлы DEF. (Условные директивы препроцессора запрещены в файлах DEF.) В качестве альтернативы можно использовать #pragma comment
директиву перед объявлением функции, как показано здесь, где PlainFuncName
является неоцененным именем и _PlainFuncName@4
является украшенным именем функции:
#pragma comment(linker, "/export:PlainFuncName=_PlainFuncName@4")
BOOL CALLBACK PlainFuncName( Things * lpParams)
Задание данного параметра компоновщика в среде разработки Visual Studio
Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.
Перейдите на страницу свойств Свойства конфигурации>Компоновщик>Командная строка.
Введите параметр в поле "Дополнительные параметры ".
Задание данного параметра компоновщика программным способом
- См. раздел AdditionalOptions.