[VS2010]_[Windows]_[Debug模式下LoadLibrary错误87]

场景

  1. VS2010 sp1 安装完之后, 原来Debug模式下编译的Dll, 运行时EXE通过LoadLibrary加载这个Dll时, 返回 HMODULE 为NULL. 通过 GetLastError()返回错误值是87(参数错误). 之前没问题的代码在重装系统和重装VS2010后Debug编译运行错误.

分析

  1. LoadLibrary只有一个unicode参数是DLL路径加载, 但是却报参数错误. 编译字符集也是用的UNICODE字符集, 系统也默认加了 _UNICODE 和 UNICODE 宏. 那么应该不是UNICODE路径问题. DLL的路径也是对的.

  2. Release模式下能编译Dll. LoadLibrary Dll返回正常. EXE能正常运行.

  3. 全部代码完整清理编译一样这个错. 只能说明Debug模式下编译的Dll 某些地址加载错误.

  4. 解决办法参考
    配置属性->链接器->启用增量链接-> 否(/INCREMENTAL:NO)

解决 LoadLibraryExA 、 LoadLibrary 参数错误 GetLastError()值87

/INCREMENTAL(增量链接)

增量链接

增量链接的可执行 (.exe) 文件或动态链接库 (DLL):
-- 大于非增量链接的程序,因为有代码和数据的填充。 (填充允许链接器增加函数和数据的大小而不用重新创建 .exe 文件。)
-- 可以包含跳转 thunk 以处理函数重定位到新地址。
 
 
  • 1
  • 2
  • 3

结论: 只有一个比较相近的解释就是Debug模式下的增量连接, 包含了一个thunk 以处理函数定位到新地址. 但是这种方式不适合显式加载vs2010的增量链接的Dll.

参考:
LoadLibrary fails on 64-bit application (error 87)
解决 LoadLibraryExA 、 LoadLibrary 参数错误 GetLastError()值87
/INCREMENTAL(增量链接)
LoadLibraryEx error 87 (The parameter is incorrect)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值