DLL导出函数

时间:2023-03-08 18:23:14

使用DEF文件从DLL导出

  模块定义(.def)文件时包含一个或多个描述DLL各种属性的Module语句的文本文件。如果不使用_declspec(dllexport)关键字导出DLL的函数,则DLL需要.def文件。

  .def文件必须至少包含下列模块定义语句:

  文件中的第一个语句必须是LIBRARY语句。此语句将.def文件标识为属于DLL。LIBRARY语句的后面是DLL的名称。链接器将此名称放到DLL的导入库中。

  EXPORTS语句列出名称,可能的话还会列出导出函数的序号值。通过在函数名的后面加上@符和一个数字,给函数分配序号值。当指定序号值时,序号值的范围必须是从1到N,其中N是DLL导出函数的个数。如果希望按序号导出函数,请参见按序号而不是按名称从DLL导出函数及本主题。

  如果使用MFC DLL向导创建MFC DLL,则向导将为您创建主干.def文件并将其自动添加到项目中。添加要导出到此文件的函数名。对于非MFC DLL,必须亲自创建.def文件将其添加到项目中。

  如果导出C++文件中的函数,必须将修饰名放到.def文件中,或者通过使用外部“C”定义具有标准的C链接的导出函数。如果需要将修饰名放到.def文件中,则可以通过使用DUMPBIN工具/MAP链接器选项来获取修饰名。请注意,编译器产生的修饰名是编译器特定的。如果将Visual C++编译器产生的修饰名放到.def文件中,则链接到DLL的应用程序必须也是用相同版本的Visual C++生成的,这样调用应用程序的修饰名才能与DLL的.def文件中的导出名相匹配。

参考自:https://wenku.baidu.com/view/dcaa4b5285254b35eefdc8d376eeaeaad0f31676.html