使用模块定义文件 (.def) 导入 DLL

Importing DLL using a module definition file (.def)

我想创建并发布一个 windows C 库。我读过有两种方法,一种是在头文件中使用 __declspec(dllexport) 和 __declspec(dllimport),另一种是使用模块定义文件 (link)。我不想修改头文件,所以我选择了第二个并创建了库,我已经确认它导出了所需的符号。

现在,当我发货时:

  1. 头文件是否仍然需要在每个导出的函数前面加上 __declspec(dllimport) 以便客户可以使用它?
  2. 我需要将模块定义文件与 dll 一起发送,还是 .lib 文件就足够了?

我当然已经用玩具示例测试了这两个问题,我相信我的两个问题的答案是否定的,但我想在发布任何东西之前与经验丰富的开发人员确认这一点。

我找到了 this 篇文章,但它写得很糟糕,我看不出任何意义。

您可以只向您的客户提供 .h 文件、.lib 导入库和 .dll 文件本身。他们不需要 .def 文件。

如果我记得,declspec 导入允许链接器进行较小的优化。关于导入 table 的一些事情。我稍后会查找并更新答案(如果我能找到它)。