代码之家  ›  专栏  ›  技术社区  ›  korbes

什么是错误的意思?无效的序数?

  •  3
  • korbes  · 技术社区  · 14 年前

    LoadLibrary函数正在向我返回错误代码182。来自MSDN:

    错误_无效_序号:“操作系统无法运行%1”

    有人能更好地描述这个错误是什么吗?

    2 回复  |  直到 14 年前
        1
  •  3
  •   Hans Passant    14 年前

    非常模糊的错误。然而,术语“序数”与一个动态链接库密切相关。DLL包含导出函数的列表以及导入函数的列表。它依赖的其他DLL。这些导出和导入通常有一个名称,但这不是必需的。他们总是有一个数字,数字是“序数”。

    要开始诊断此问题,请使用SDK的dumpbin.exe工具。首先运行:

    Dumpbin /exports Blah.dll
    

    看看出口清单。你应该看到序数和名字。如果一切都结束了,快跑

    Dumpbin /imports Blah.dll
    

    获取依赖项列表。很有可能它依赖于另一个dll中的函数(按此dll没有的数字)。无论如何都是这样。通过使用DependencyWalker工具,您可能可以降低工作难度。如果第一步失败,那么在构建DLL时会出现严重错误。如果第二步失败,那么您可能会看到某种DLL地狱问题。

        2
  •  0
  •   Peter Ruderman    14 年前

    您确定此错误来自LoadLibrary吗?Windows DLL允许您按名称和序号值指定导出。也就是说,每个函数都可以通过一个数字来标识。如果调用GetProcAddress并指定无效的序号,则会出现此错误。

    我的最佳猜测是,您正在加载的dll正在其dllmain中调用getprocaddress并指定一个无效的序号。这会导致它失败,当您调用GetLastError时,您会得到错误“无效”,因为这是发生的最后一个错误。