【问题标题】:LoadLibrary is failing with module not found error -- possible dependency problemsLoadLibrary 因找不到模块错误而失败 - 可能存在依赖性问题
【发布时间】:2011-02-15 22:15:27
【问题描述】:

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

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

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

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

提前感谢您的帮助!

【问题讨论】:

  • 一些附加信息:当我调用 LoadLibrary 时,Visual Studio 调试器显示 dll 已加载,然后立即卸载。我相当肯定这意味着找到了 dll 就好了,但 DllMain 函数返回 false。这似乎指向一个依赖问题,但到目前为止我还没有弄清楚任何事情。

标签: dll dependencies x86 64-bit loadlibrary


【解决方案1】:

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

【讨论】:

【解决方案2】:

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

你的, 阿洛伊斯克劳斯

【讨论】:

    猜你喜欢
    • 2013-10-25
    • 2020-05-31
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 2012-12-27
    • 2018-03-21
    • 1970-01-01
    相关资源
    最近更新 更多