【问题标题】:DLL Export __declspec(dllexport) doesn't workDLL 导出 __declspec(dllexport) 不起作用
【发布时间】:2012-04-14 09:53:59
【问题描述】:

我尝试使用 __declspec(dllexport) 在我的 DLL 中导出函数,但它不起作用。 当我在主应用程序中运行 GetProcAddress 时,它总是显示“找不到指定的模块”。

但是如果我通过 .def 文件导出我的函数。效果很好。

你能帮我解决这个问题吗?我想使用 __declspec(dllexport) 而不是 .def 文件。

非常感谢。 (我使用的是 Visual C++ 2005,MFC)

【问题讨论】:

    标签: dll export


    【解决方案1】:

    找不到指定的模块

    这是错误的错误信息,只有在 LoadLibrary 失败时才会收到。通常是因为您使用了错误的文件名。 GetProcAddress() 失败,出现错误 127,“找不到指定的过程”。

    假设它实际上是导出的函数名称,您没有很多选项可以使用 __declspec(dllexport) 重命名函数。您只有 extern "C" 来抑制 C++ 名称修改。导出的名称仍将在其名称前有一个下划线,如果它被声明为 __stdcall,则在其名称后有一个 @n。只有在 64 位代码中或使用 .def 文件才能导出完全未修饰的内容。

    使用 DLL 上的 dumpbin.exe /exports 查看实际名称。如果您先删除 .pdb 文件,您将获得更好的转储。 Depends.exe 也不错。

    【讨论】:

      【解决方案2】:

      我希望您在使用 GetProcAddress 时不会寻找正确的名称。你用dumpbin或者Dependency Walker验证导出函数的名字了吗?

      【讨论】:

      • 是的。我使用了 Dependency Walker,我看到我的函数被导出了。
      猜你喜欢
      • 1970-01-01
      • 2011-03-28
      • 1970-01-01
      • 2018-08-05
      • 2023-01-26
      • 2016-02-18
      • 2012-07-14
      • 2015-02-24
      • 2016-03-25
      相关资源
      最近更新 更多