DLL导出__declspec(dllexport)不起作用

时间:2012-03-30 17:22:08

标签: dll export

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

但是如果我通过.def文件导出我的函数。它运作得很好。

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

非常感谢你。 (我正在使用Visual C ++ 2005,MFC)

2 个答案:

答案 0 :(得分:2)

  

找不到指定的模块

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

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

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

答案 1 :(得分:0)

我希望您在使用GetProcAddress时找不到正确的名称。您是否使用了dumpbin或Dependency Walker来验证导出函数的名称?