加载DLL时,::GetProcAddress返回NULL,::GetLastError()返回127问题详解

GetProcAddress()是通过函数名寻址,造成这样的最可能是由于GetProcAddress中的函数名与DLL编译导出生成的函数名不一致

推荐Dependecy Walker工具,通过改工具打开生成的dll文件,就可以知道导出名长啥样,是不是跟预想中的一样

 接下来进入解决方案正题

dll导出有两种方式(成功导出时会生成lib文件):

1、通过.def文件导出

首先顺便提一下.def文件生成步骤,以VS2017为例,右键源文件—>添加—>新建项—>代码—>模块定义文件 生成.def文件,.def文件编写格式不再赘述。这时需要在函数声明中添加 __stdcall声明,这时导出的函数名是就是预想中的函数名。

如 void __stdcall FuncName();

2、通过在导出函数声明前添加__declspec(dllexport)关键字导出

如 __declspec(dllexport) void __stdcall FuncName()

若是通过该方式导出,就不可以添加__stdcall关键字,否则,如上述函数名导出的函数名会变成 _FuncName@0,所以此时得放弃__stdcall 关键字,__declspec(dllexport) void FunName()。

 

你可能感兴趣的:(加载DLL时,::GetProcAddress返回NULL,::GetLastError()返回127问题详解)