加载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()。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值