/EXPORT(导出函数)
按名称或序号或数据从程序导出函数。
语法
/EXPORT:entryname[,@ordinal[,NONAME]][,DATA]
备注
/EXPORT 选项指定要从程序导出的函数或数据项,以便其他程序可以调用该函数或使用该数据。 导出通常在 DLL 中定义。
entryname 是函数或数据项的名称,它要供调用程序使用。 ordinal 在 1 到 65,535 范围内指定导出表的索引;如果不指定 ordinal,LINK 会分配一个。 NONAME 关键字仅将函数导出为序号,不带有 entryname。
DATA 关键字指定导出的项为数据项。 必须使用 extern __declspec (dllimport) 声明客户端程序中的数据项。
可通过采用建议的使用顺序列出的四种方法导出定义:
源代码中的 __declspec(dllexport)
.def 文件中的 EXPORTS 语句
LINK 命令中的 /EXPORT 规范
源代码中的 comment 指令,形式为
#pragma comment(linker, "/export: definition ")
。
所有这些方法可以用在同一个程序中。 LINK 在生成包含导出的程序时还创建导入库,除非生成中使用了 .exp 文件。
LINK 使用修饰形式的标识符。 编译器在创建 .obj 文件时修饰标识符。 如果 entryname 以未修饰形式(如源代码中所显示)指定给链接器,则 LINK 会尝试匹配该名称。 如果找不到唯一匹配,LINK 会发出错误消息。 需要将标识符指定给链接器时,请使用 DUMPBIN 工具获取标识符的 修饰名 形式。
注意
请勿指定声明 __cdecl
或 __stdcall
的 C 标识符的修饰形式。
如果你需要导出未修饰的函数名称,并且根据生成配置(例如,在 32 位或 64 位构建中)具有不同的导出,可以针对每个配置使用不同的 DEF 文件。 (DEF 文件中不允许使用预处理器条件指令。)可以改为在函数声明之前使用 #pragma comment
指令,如此处所示,其中 PlainFuncName
是未修饰名,_PlainFuncName@4
是函数的修饰名称:
#pragma comment(linker, "/export:PlainFuncName=_PlainFuncName@4")
BOOL CALLBACK PlainFuncName( Things * lpParams)
在 Visual Studio 开发环境中设置此链接器选项
打开项目的“属性页” 对话框。 有关详细信息,请参阅在 Visual Studio 中设置 C++ 编译器和生成属性。
选择“配置属性”>“链接器”>“命令行”属性页 。
将该选项输入“附加选项”框中。
以编程方式设置此链接器选项
- 请参阅 AdditionalOptions。