.def文件与__declspec(dllexport)宏

时间:2015-06-11 06:05:54

标签: c++ dllexport

我们的团队正在考虑从def文件迁移到__declspec(dllexport)宏,因为它必须在*.def文件中使用修改名称,这是一项繁琐的任务,可以在那里维护那些丑陋的名字。但我们仍然怀疑使用* .def文件而不是__declspec(dllexport)宏进行功能导出会有什么好处。

感谢您的建议!

2 个答案:

答案 0 :(得分:1)

根据MSDN: https://msdn.microsoft.com/en-us/library/hyx1zcd3.aspx,有四种导出定义的方法,按推荐顺序列出:

  1. 源代码中的__declspec(dllexport)关键字
  2. .DEF文件中的EXPORTS语句
  3. LINK命令中的/ EXPORT规范
  4. 源代码中的注释指令,格式为#pragma
  5. 评论(链接器,“/ export:definition”)
  6. .DEF文件的优点如下:

    1. 您可以按序号
    2. 导出

      .DEF文件的缺点是:

      1. 您还有其他要维护的文件
      2. 您必须使用修饰的函数名称
      3. 按顺序导出的优点是可以减小导出表的大小。但是,你必须使用序数而不是友好名称。

答案 1 :(得分:-1)

.def文件可以按顺序值(@ 1,@ 2,...)导出,而不是按名称导出。这可以:

  1. 增加符号查找性能
  2. 保持向后 与已发布的dll(即序数)的兼容性 添加新api时,旧api的数字完好无损。
  3. 它可以避免函数名称被修饰,从而提高了编译器的兼容性(即调用__stdcall和__cdecl的约定差异)。 这是an example在dll中导出未修饰的名称。