LoadLibrary失败,出现模块未找到错误--可能存在依赖关系问题 我一直试图用C++(从32位应用程序,在Windows 7 64位)加载32位DLL。LoadLibrary返回NULL,GetLastError为“找不到指定的模块”返回126

LoadLibrary失败,出现模块未找到错误--可能存在依赖关系问题 我一直试图用C++(从32位应用程序,在Windows 7 64位)加载32位DLL。LoadLibrary返回NULL,GetLastError为“找不到指定的模块”返回126,dll,dependencies,x86,64-bit,loadlibrary,Dll,Dependencies,X86,64 Bit,Loadlibrary,我正在将完整地址传递给LoadLibrary函数。我在Dependency Walker中打开了dll,上面说GPSVC.dll是一个缺少的依赖项 从我所做的谷歌搜索来看,Dependency Walker似乎经常错误地将这个GPSVC.dll显示为缺少的依赖项,而且它并没有32位版本,所以我认为这不是真正的问题 过去我没有对DLL做过太多的欺骗,所以希望这是一个相对简单的问题,我可以从中学习 提前感谢您的帮助 你能调试到另一个dll的DllMain吗?如果是,您可以直接在调试器中进行检查。使用

我正在将完整地址传递给LoadLibrary函数。我在Dependency Walker中打开了dll,上面说GPSVC.dll是一个缺少的依赖项

从我所做的谷歌搜索来看,Dependency Walker似乎经常错误地将这个GPSVC.dll显示为缺少的依赖项,而且它并没有32位版本,所以我认为这不是真正的问题

过去我没有对DLL做过太多的欺骗,所以希望这是一个相对简单的问题,我可以从中学习


提前感谢您的帮助

你能调试到另一个dll的DllMain吗?如果是,您可以直接在调试器中进行检查。使用Windbg,您可以在模块加载时中断,这样您就可以单步执行所发生的操作。您是否直接针对dll的库进行链接?如果没有,您可以尝试这样做,以检查操作系统将向您显示什么错误消息。如果是0xC0000142,则DllMain确实返回false。如果为0xC0000022,则可执行文件或其中一个从属DLL没有执行权限。您的代码126只是模块未找到,这似乎说明了整个情况。您可以手动将PATH变量设置为目录中缺少dll的位置。 是否将dll部署到其他计算机上?如果是,则可能是您正在链接到 调试C运行时未安装在普通计算机上

你的,
阿洛伊斯·克劳斯

我解决了我的问题,不幸的是,这是一个相当明显的解决方案。我将包含dll的目录添加到PATH变量中。显然DLL不会在自己的目录中查找依赖项

一些附加信息:当我调用LoadLibrary时,VisualStudio调试器显示dll已加载,然后立即卸载。我很确定这意味着dll被找到的很好,但是DllMain函数返回false。这似乎指向了一个依赖性问题,但到目前为止我还没有找到任何解决办法。这是可行的,但不安全。请参阅上的“安全备注”。再看看。