今天真是把我给折腾坏,一个“loadlibrary失败”的问题,从早搞到晚,差点没把我电脑给砸。事情是这样的:
我最近在搞一个项目,需要用到一个第三方的DLL文件。你知道的,就是那种动态链接库,可以实现一些特定功能。我把这个DLL文件放到项目目录下,然后在代码里用LoadLibrary函数去加载它。
结果,运行程序,直接给我弹出一个错误框,说“loadlibrary失败”。我当时就懵,心想这啥情况?
我第一反应就是,路径是不是写错?
我仔仔细细地检查一遍路径,确认文件名、文件夹啥的都没问题。我还特意把DLL文件拖到资源管理器里,复制完整的路径,粘贴到代码里,结果还是不行!
然后我就开始怀疑,是不是这个DLL文件本身有问题?
- 是不是文件损坏?
- 是不是版本不对,跟我的系统不兼容?
- 是不是还依赖其他的DLL文件,我没放进去?
为验证这些猜想,我做以下尝试:
- 我从官网重新下载这个DLL文件,替换掉原来的,结果还是“loadlibrary失败”。
- 我查一下这个DLL文件的版本信息,确认它是支持我的Windows 10系统的。
- 我去网上搜一下这个DLL文件的依赖关系,发现它确实依赖其他几个DLL文件。我赶紧把这些依赖文件也下载下来,放到项目目录下,结果依然没用!
各种折腾,各种尝试
这时候,我已经有点崩溃。我开始在网上疯狂搜索“loadlibrary失败”的原因和解决方法,找到一大堆相关的帖子和文章。
有人说,可能是因为DLL文件没有正确安装,要用regsvr32命令注册一下。我试,没用。
有人说,可能是因为系统环境变量没设置好,要把DLL文件所在的目录添加到PATH环境变量里。我试,还是没用。
有人说,可能是因为VS编译器的设置问题,要在项目属性里配置一下依赖项。我看半天,没搞懂,放弃。
有人说……各种方法我都试个遍,就是不行!
终于找到原因!
就在我快要绝望的时候,我突然想到,我这个项目之前是用VS2010编译的,后来我升级到VS2019,会不会是这个原因导致的?
我抱着试一试的心态,把项目重新用VS2010编译一遍,然后运行……居然成功!
我当时的心情,真是无法形容。原来折腾这么久,问题竟然出在编译器版本上!
虽然问题解决,但我还是觉得很郁闷。为什么VS2019加载不这个DLL文件?这背后到底是什么原因?我决定继续深挖一下,看看能不能找到更彻底的解决方案。
不过今天就先到这里,我已经精疲力尽。等我有新的发现,再来跟大家分享。