4

我一直在尝试使用 C++ 加载 32 位 dll(来自 32 位应用程序,在 Windows 7 64 位上)。LoadLibrary 返回 NULL,GetLastError 为“找不到指定的模块”返回 126。

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

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

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

提前感谢您的帮助!

4

2 回答 2

3

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

于 2011-02-15T22:49:53.653 回答
2

你能调试到其他dll的DllMain吗?如果是,您可以直接在调试器中检查。使用 Windbg,您可以中断模块加载,以便您可以单步执行发生的情况。您是否直接链接到 dll 的库?如果不是,您可以尝试这样做以检查操作系统会显示什么错误消息。如果是 0xC0000142,那么 DllMain 确实返回 false。如果它是 0xC0000022,则可执行文件或依赖 dll 之一没有执行权限。您的代码 126 只是未找到模块,这似乎说明了整个故事。您可以手动将 PATH 变量设置到目录中丢失的 dll 的位置。您是否将 dll 部署到其他机器?如果是,则可能是您正在链接未安装在普通机器上的调试 C-Runtime。

你的,阿洛伊斯克劳斯

于 2011-02-15T22:49:01.277 回答