究竟是什么意思ERROR_INVALID_ORDINAL?

时间:2010-08-16 21:00:26

标签: dll winapi loadlibrary

LoadLibrary函数返回给我错误代码182.来自MSDN:

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

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

2 个答案:

答案 0 :(得分:3)

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

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

Dumpbin /exports Blah.dll

并查看导出列表。您应该看到序数以及名称。如果全部结账,请运行

Dumpbin /imports Blah.dll

获取依赖项列表。奇怪的是,它依赖于该DLL没有的数字在另一个DLL中的函数。无论如何都是这样的。使用DependencyWalker工具可能会减少费力。如果第一步失败,那么在构建DLL时出现了严重错误。如果第二步失败,那么你可能正在研究某种DLL Hell问题。

答案 1 :(得分:0)

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

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