确定要使用的导出方法
可以导出函数中的两种 .def 文件或 __declspec(dllexport) 关键字。为了帮助您确定哪种方式为 DLL 比较好,请考虑以下问题:
您是否计划后导出多个功能?
可以重新生成的应用程序仅使用,也应用程序使用的 DLL 中重新生成不为示例中,由第三方创建的应用程序?
使用 .def 文件的优缺点
在 .def 文件中导出函数使您能够导出序号的控件。将导出的函数在的 DLL 时,除了其他导出函数可以为其分配较高的序号值。如果这样做,使用隐式链接的应用程序不必重新链接与包含新函数的导入库。这非常方便,如果您设计的 DLL 供许多应用程序使用,因为您可以添加新功能并确保它仍将已依赖于它的应用程序一起使用。例如,通过使用 .def 文件,MFC DLL 编译。
对于使用 .def 文件的另一个优点是可以使用 NONAME 属性导出函数。这在 DLL 的导出表中放置仅的导出。对 DLL 具有大量导出函数,使用 NONAME 属性可以减小 DLL 文件的大小。有关如何编写模块定义语句的信息,请参见 模块定义语句的规则。有关序号导出的信息,请参见 按序号而不是按名称从 DLL 导出函数"。
使用 .def 文件的缺点是,如果导出在 c. c++ 文件的功能,可以在 .def 文件必须置于修饰名或定义导出函数使用 extern“C”避免由 Visual C++ 编译器实现的名称修饰。
如果在 .def 文件中修饰名,通过使用链接器 /MAP 选项,可以获取它们使用 DUMPBIN 工具或。由编译器产生的修饰名是编译器特定的;因此,因此,如果您将由编译器生成的放到 .def 文件中的修饰名,应用程序还必须生成 DLL 的链接使用编译器的版本相同,以便调用应用程序的修饰名与 DLL 的 .def 文件导出的名称。
使用 __declspec(dllexport) 的优缺点
使用 __declspec(dllexport),因为不必考虑维护 .def 文件和获取导出函数,的修饰名的情况。但是,此方法的作用导出由链接的应用程序的数目想重新生成。如果重新生成使用新的导出 DLL,还必须重新生成应用程序,因为修饰名导出的 C++ 函数可能更改,如果使用编译器的不同版本重新生成它。