我尝试使用 __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/