DLL 导出 __declspec(dllexport) 不起作用

标签 dll export

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

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

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

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

最佳答案

The specified module could not be found

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

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

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

关于DLL 导出 __declspec(dllexport) 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9947614/

相关文章:

c++ - 我可以跨 DLL 边界传递 FILE 对象吗?

c# - 在 C# 中创建一个 .csv 文件

java - 在 JFileChooser 中找出文件扩展名

ruby - 如何使用 Ruby fiddle 加载 Windows DLL 文件?

C# DLL 的包装器

c# - Asp.Net C# Dll导入问题

import - Tensorflow 0.8 import/export 输出张量问题

c++ - 在 DLL 中转发导出函数的问题

java - 导出/导入加密代码 Java

c - 静态/动态库与 .so 库?