动态加载DLL函数GetProcAddress错误

GetLastError获取错误代码127,指代“找不到指定程序”。

解决:

转自:http://hi.baidu.com/violetwangy/item/c35b3b95ecf5374cf042152a

采用“运行期间动态链接”自己的dll文件,LoadLibrary成功获取dll模块句柄,但是GetProcAddress(hModule, "ExportFunc")却返回NULL,GetLastError获取错误代码127,意思是“找不到指定程序”。

问题所在:用Depends工具(VS2010默认没有,需另行下载:http://www.dependencywalker.com/),查看dll的导出函数名称。发现导出函数名不再是“ExportFunc”,而根据函数的返回类型和参数进行了“decorate”,变为了“?ExportFunc@@YAXPB_W@Z”。

解决方法:

(1)修改GetProcAddress的第二个参数为真正的导出函数名称即可;

(2)在dll工程中添加DEF文件,写入如下内容:

         EXPORTS

                         ExportFunc

        重新编译dll工程。再次用Depends工具查看导出函数名称,即为“ExportFunc”。

工程--链接器--输入 的模块定义文件中,将自己的DEF文件加上

http://www.cnblogs.com/skynext/
原文地址:https://www.cnblogs.com/skynext/p/3719021.html