【问题标题】:LoadLibraryEx error 87 (The parameter is incorrect)LoadLibraryEx 错误 87(参数不正确)
【发布时间】:2016-03-29 04:36:07
【问题描述】:

我的一个应用程序无法在唯一的机器上加载系统库。 LoadLibraryEx 返回 0GetLastError 返回 87(参数错误)。

这会导致这样的错误,我该如何调试它?

错误仅出现在属于我的客户端(服务器 2008R2)的单台机器上。库位于 system32 文件夹中。代码如下:

HMODULE lib = LoadLibraryEx(L"authui.dll", NULL,
                            LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_SEARCH_SYSTEM32);
if (lib == NULL)
{
    DWORD err=GetLastError();
    Log(L"error id: ", err);
    throw;
}

我无法在我的 2008R2 副本上重现该错误,并且不知道是什么导致了该错误。我的应用是用 VS2015 C++(纯 WinApi,没有 MFC 或第三方库)编写的,它是 64 位的。

【问题讨论】:

  • 您是否阅读过 msdn 关于使用 LOAD_LIBRARY_SEARCH_SYSTEM32 的说明?看来你需要先安装一些补丁。请参阅LoadLibraryEx doc。
  • 哦,我相信我读过文档,但似乎没有。将尽快与客户进行测试。谢谢。
  • 为什么不用绝对路径?
  • 因为它会多添加一行代码来解码 %windir%

标签: c++ winapi loadlibrary


【解决方案1】:

Joel 是对的。问题出在KB2533623 更新中,该更新未安装在问题机器上。我已将代码更改为使用David Heffernan 推荐的绝对路径,现在可以正常工作了。

【讨论】:

    【解决方案2】:

    使用authui.dll的绝对路径作为LoadLibraryEx的第一个参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-20
      • 1970-01-01
      • 1970-01-01
      • 2020-04-08
      • 2021-06-28
      • 2011-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多