我一直在尝试使用C ++(来自32位应用程序,在Windows 7 64位上)加载32位dll。 LoadLibrary返回NULL,并且GetLastError返回126“无法找到指定的模块。”
我将完整地址传递给LoadLibrary函数。我在Dependency Walker中打开了dll,它说GPSVC.dll是一个缺失的依赖。
从我已经完成的谷歌搜索,看起来Dependency Walker经常错误地将此GPSVC.dll显示为缺少的依赖项,并且没有32位版本,所以我不认为这是实际的问题。
过去我没有做太多关于dll的讨论,所以希望这是一个相对简单的问题,我可以从中学习。
提前感谢您的帮助!
答案 0 :(得分:3)
我解决了我的问题,不幸的是,这是一个相当明显的解决方案。我将包含我的dll的目录添加到PATH变量中。显然dll不会在自己的目录中查找它们的依赖项。
答案 1 :(得分:1)
你可以调试到其他dll的DllMain吗?如果是,您可以直接在调试器中检查。使用Windbg,您可以打破模块负载,这样您就可以单步执行所发生的操作。你直接链接到DLL的lib吗?如果没有,您可以尝试这样做以检查操作系统将向您显示的错误消息。如果是0xC0000142,那么DllMain确实返回false。如果它是0xC0000022,则可执行文件或其中一个从属dll没有执行权限。您的代码126只是简单的模块,它似乎告诉了整个故事。您可以手动将PATH变量设置为目录到缺少的dll的位置。 你把dll部署到其他机器上了吗?如果是,那可能是你正在联系 调试C-Runtime,它没有安装在普通机器上。
此致, Alois Kraus