5

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

ERROR_INVALID_ORDINAL:“操作系统无法运行 %1”

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

4

2 回答 2

5

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

要开始对此进行诊断,请使用 SDK 的 Dumpbin.exe 工具。首先运行这个:

Dumpbin /exports Blah.dll

并查看出口清单。您应该看到序数以及名称。如果一切顺利,请运行

Dumpbin /imports Blah.dll

获取依赖项列表。很有可能它依赖于另一个 DLL 中的函数,这个 DLL 没有这个 DLL。反正是这样的。您可以通过使用 DependencyWalker 工具来减少工作量。如果第一步失败,那么在构建 DLL 时就会出现严重错误。如果第二步失败,那么您可能正在查看某种 DLL Hell 问题。

于 2010-08-16T22:09:27.587 回答
0

您确定此错误来自 LoadLibrary 吗?Windows DLL 允许您按名称和序数值指定导出。也就是说,每个功能都可以用一个数字来标识。如果您调用 GetProcAddress 并指定无效的序数,那么您将收到此错误。

我最好的猜测是,您正在加载的 DLL 在其 DllMain 中调用 GetProcAddress 并指定了一个无效的序数。这会导致它失败,并且当您调用 GetLastError 时,您会得到 ERROR_INVALID_ORDINAL,因为这是发生的最后一个错误。

于 2010-08-16T21:14:12.780 回答