引入了一个由一个或多个 definitions(导出的函数或数据)组成的节。每一个定义必须在单独一行上。函数
EXPORTS definitions
备注 rem
EXPORTS 关键字能够在第一个定义所在的同一行或前一行上。.def 文件能够包含一个或多个 EXPORTS 语句。 get
导出 definitions 的语法为:it
entryname[=internalname] [@ordinal [NONAME]] [PRIVATE] [DATA]
entryname 是要导出的函数名或变量名。这是必选项。若是导出的名称与 DLL 中的名称不一样,则经过 internalname 指定 DLL 中导出的名称。例如,若是 DLL 导出函数 func1(),要将它用做 func2(),则应指定:io
EXPORTS func2=func1
@ordinal 容许指定是序号而不是函数名将进入 DLL 的导出表。这有助于最小化 DLL 的大小。.LIB 文件将包含序号与函数之间的映射,这使您得以像一般在使用 DLL 的项目中那样使用函数名。 import
可选的 NONAME 关键字容许只按序号导出,并减少结果 DLL 中导出表的大小。可是,若是要在 DLL 上使用 GetProcAddress,则必须知道序号,由于名称将无效。 变量
可选的 PRIVATE 关键字禁止将 entryname 放到由 LINK 生成的导入库中。它对一样是由 LINK 生成的图像中的导出无效。 语法
可选的 DATA 关键字指定导出的是数据,而不是代码。例如,能够导出数据变量,以下所示:程序
EXPORTS i DATA
当对同一导出使用 PRIVATE 和 DATA 时,PRIVATE 必须位于 DATA 的前面。 方法
有三种导出定义的方法,按照建议的使用顺序依次为:
源代码中的 __declspec(dllexport) 关键字
.def 文件中的 EXPORTS 语句
LINK 命令中的 /EXPORT 规范
全部这三种方法能够用在同一个程序中。LINK 在生成包含导出的程序时还建立导入库,除非生成中使用了 .exp 文件。
如下是 EXPORTS 节的示例:
EXPORTS DllCanUnloadNow @1 PRIVATE DATA DllWindowName = Name DATA DllGetClassObject @4 NONAME PRIVATE DllRegisterServer @7 DllUnregisterServer
注意,使用 .def 文件从 DLL 中导出变量时,不须要在变量上指定 __declspec(dllexport)。可是,在任何使用 DLL 的文件中,仍必须在数据声明上使用 __declspec(dllimport)。