【问题标题】:VC++-MFC : LoadLibrary returns invalid handle 0x10000000VC++-MFC:LoadLibrary 返回无效句柄 0x10000000
【发布时间】:2010-12-10 02:57:53
【问题描述】:

我无法使用LoadLibrary() API 加载我的 test.dll(在 VC++ - MFC 中)。我得到错误代码126 (Module not found)使用GetLastError()。 通过依赖walker,我知道我的test.dll 依赖于“xerces-c_2_7.dll”和“Xalan-C_1_10.dll”。这些 dll 已经存在于与 exe 相同的路径上。 我仍然收到错误消息。 所以我尝试使用LoadLibrary() 加载上述两个第三方dll,返回句柄为0x10000000GetLastError()我收到了

error code 6 (Invalid Handle).

谁能指导我为什么会收到 Invalid Handle 错误?

以下是代码片段:

HINSTANCE hLib = LoadLibrary(_T("Xalan-C_1_10"));
TCHAR szMessage[MAX_PATH];
FormatMessage(FORMAT_MESSAGE_IGNORE_INSERTS|
    FORMAT_MESSAGE_FROM_SYSTEM,
    NULL, GetLastError(),
    MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),
    szMessage, MAX_PATH, NULL);
    hLib = LoadLibrary(_T("xerces-c_2_7"));
FormatMessage(FORMAT_MESSAGE_IGNORE_INSERTS|
    FORMAT_MESSAGE_FROM_SYSTEM,
    NULL, GetLastError(),
    MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),
    szMessage, MAX_PATH, NULL);

【问题讨论】:

  • 我不明白这个问题。根据 MSDN,任何非空返回值都表示成功,0x10000000 是非空的。
  • @erikkallen:IIUC,OP 能够单独加载 Xerces 和 Xalan,但不能单独加载 test.dll

标签: mfc visual-c++ loadlibrary


【解决方案1】:

test.dll 是您的 DLL 还是第三方 DLL?

If it is a your DLL, 

您应该能够轻松地看到代码中依赖的 DLL 及其确切路径。

If it is third party DLL,

您需要尝试 windows 路径、程序文件路径、您的测试 DLL 路径等...记住这只是一个尝试。 有时它们可​​能会引用只有 DLL 的创建者知道的路径如果没有记录

希望这个答案有帮助!

【讨论】:

    【解决方案2】:

    提炼你的问题,我收集:

    • 您可以单独加载 Xerces 和 Xalan,但不能加载 test.dll 文件(它引用其他 dll)

    • 在加载 Xerces 或 Xalan 时,您可能会被 GetLastError() 返回的值误导

    请记住,您必须在拨打 LoadLibrary 之后立即拨打 GetLastError():来自 MSDN 文档:

    当函数的返回值表明这样的调用将返回有用的数据时,您应该立即调用 GetLastError 函数。那是因为有些函数调用 SetLastError 时调用的值为 0,从而清除了最近失败的函数设置的错误代码。

    这很可能是依赖项/路径解析问题(即LoadLibrary 找不到请求的图像)。所以,你有两个选择:

    • test.dll/Xerces/Xalan 是否还有其他未复制到可执行文件文件夹的依赖项?

    • 将 dll 放入 Windows\System32 文件夹,然后重试。如果这可行,那么您可以确定您遇到了路径问题。阅读 LoadLibrary 上的 MSDN 页面——这有点令人困惑,但有些细节很容易忽略。

    • 使用GetCurrentDirectorySetCurrentDirectory 切换应用程序的执行文件夹和dll 的驻留文件夹

    • 在对 LoadLibrary 的调用中指定 dll 的完整路径。如果路径名包含空格,您可能会遇到问题(我从记忆中记得,请与 MSDN 核对)。

    • 完成后,做个好公民并致电FreeLibrary

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 2013-04-24
      • 2022-01-11
      • 2015-05-18
      • 2014-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多