遇到的问题
代码如下
void *p=NULL;
p=LoadLibrary("***.dll");
通过单步调试发现,p的值始终为0X00000000,即LoadLibrary调用失败
查了很多资料,将总结以及我的解决方案记录如下
- 检查路径是否正确。我用的是相对路径,相对路径需要把该dll文件放在程序生成的exe文件目录下(也就是VS中 项目->属性->(配置属性)常规->输出目录),然后由于字符格式问题,可以写成这样
p=LoadLibrary(TEXT("***.dll"));
TEXT宏可以消除格式问题。 - DLL的一致性问题。也就是exe版本必须要和dll版本在debug/release上是一致的,x64或者win32可能也需要保持一致。我是用的release x64版本。
- 如果还没有解决问题,采用GetLastError()函数获取错误消息,GetLastError()函数是获取上一个发生错误的结果的api,所以要在LoadLibrary下一行接着调用
void *p=NULL;
p=LoadLibrary("***.dll");
DWORD error_id=GetLastError();
- 通过打印或者在单步调试中查看error_id的值,然后搜索相应解决办法。我的返回值是193,主要问题是我加载的这个dll还关联着其他的dll,所以我将需要用到的dll都放在了exe程序的目录下就成功运行了。