【问题标题】:LoadLibrary returns 126 when loading a dll in runtimeLoadLibrary 在运行时加载 dll 时返回 126
【发布时间】:2020-05-08 14:04:55
【问题描述】:

我的 MFC dll 文件试图在运行时使用 LoadLibrary 函数加载另一个 dll。
下面的代码在具有 MBCS 字符集的控制台应用程序中运行良好。
但是,我在 MFC dll 中使用的相同代码不起作用。

GetLastError 一直在尝试返回126,即Module NOT Found
我的 MFC dll 具有 MBCS 字符集
我什至尝试将 dll 放在工作目录中,尝试使用 dll 名称访问它,但仍然找不到。
我花了几个小时寻找解决方案,但没有解决我的问题。

我尝试使用 Dependency Walker 查找 dll,并且加载正常。
有人有想法吗? 这是我的示例 sn-p 代码:

HINSTANCE dllGetproc = LoadLibrary((LPCSTR)"C:\\Proj\\dev\\Soft\\Soft.FXX.dll");

if (!dllGetproc ) {
    Format(var,"Could not load the dynamic library error = %d", GetLastError());
    Log(var);
}
else {
    Log("Loaded successfully.");
}

【问题讨论】:

  • 请不要只发布代码 sn-ps。发布正确的minimal reproducible examples,其他人可以实际运行并使用它来复制问题。通常,在创建最小示例时,您甚至会自己发现错误。
  • 你应该删除那个(LPCSTR)。我不确定你为什么要添加它,但它没有任何作用。如果该值不是LPCSTR,那么您的演员只会用于抑制编译器消息。这真的无济于事。
  • 如果你调用LoadLibraryA()会发生什么?
  • @phi OP 正在调用LoadLibraryA
  • @DecryptDcode 如上一条评论所述,删除 (LPCSTR) 演员表。你的代码编译了吗?是的,我们知道您声称您的设置是 MBCS,但没有真正的证据。证明将是,如果您删除该演员表并获得干净的编译。

标签: c++ visual-studio winapi dll mfc


【解决方案1】:

错误代码告诉您找不到模块。要么:

  1. 找不到您尝试加载的库。
  2. 可以找到该库,但如果找不到它的依赖项(通常是 MSVC 运行时库),则可以找到该库。

【讨论】:

    【解决方案2】:

    我现在已经找到了根本原因。我忘了告诉我在调试时在我的应用程序进程中附加了 dll。
    该应用程序要求Soft.FXX.dll 应与它位于同一目录中。我真的认为将整个 dll 路径提供给 LoadLibrary 函数就足够了。

    【讨论】:

    • 这是另一个问题,请不要在答案中提问,而是应该编辑您的问题或提出新问题。但作为快速回答,请参阅SetDllDirectorySafeDllSearchMode 上的文档
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多