如果遇到了以下几种问题,也许可以在本文找到解决方法:
一、版本更新后,原本正常的功能突然无法使用了;
二、VS编译的时候,弹出“xxx(win32):已加载“xx.dll”,
xxx(win32):已卸载“xx.dll”” 如图所示:
在这里插入图片描述
三、经排查和调试,确认是LoadLibrary宏返回的动态库句柄为空导致的,并且利用GetLastError函数获取的错误代码为126;

那么你可能跟我一样,遇到了加载动态库失败的问题。
这个问题网上有很多解决办法,但有些写的不是很详细,在这里汇总一下:
1)路径问题。请确认输入的dll路径无误,比如放的文件夹位置不对,比如dll路径字符串出现了转义字符,请务必确认路径中用的是双反斜杆(“\\”),而非单斜杆(“/”),正确的路径示意:“C:\\User\\Desktop\\test.dll”;
2)还是路径问题,但可能是路径的格式造成的。注意,loadlibray本质是LoadLibraryW和LoadLibraryA函数的宏,一个参数是宽字符,一个是窄字符,注意匹配。你也可以直接在参数前加TEXT宏TEXT(“C:\User\Desktop\test.dll”),windows头文件中提供的这个宏会根据是否定义了UNICODE宏来自动选择字符串类型;
3)位数不对,64位的进程不能加载32位的dll,32位的进程也不能加载64位的dll;
4)dll缺失依赖库。这是我遇到的问题。首先,你需要确认该dll所依赖的其他库,你是否都有,程序是否都能访问上,如果没有,请找到缺失的依赖库,然后挪到进程exe当前目录下。
确认动态库的依赖操作如下:
下载一个depends.exe(这是微软的一个小程序,无须安装,据说VC里面就有,我没用过VC不清楚)
直接打开,然后打开dll,它会自动分析,我以7z.dll为例,
在这里插入图片描述
如上图所示,7z.dll旁的64代表这是一个64位的dll,7z.dll下的四个dll,则是他所依赖的四个dll。因为我这里没有缺失,所以看上去都是正常的。如果缺失了某dll,他会显示一个黄色的问号。
在这里插入图片描述
我就是通过这个方法找到了软件缺失了两个DLL,解决了问题。
望诸君debug顺利。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐