LoadLibrary 函数向我返回错误代码 182。来自 MSDN:
ERROR_INVALID_ORDINAL:“操作系统无法运行 %1”
有没有人更好地描述这个错误是什么?
LoadLibrary 函数向我返回错误代码 182。来自 MSDN:
ERROR_INVALID_ORDINAL:“操作系统无法运行 %1”
有没有人更好地描述这个错误是什么?
非常晦涩的错误。然而,术语“序数”与 DLL 密切相关。DLL 包含导出函数列表和导入函数列表。它依赖的其他 DLL。这些导出和导入通常有一个名称,但这不是必需的。他们总是有一个数字,这个数字是“序数”。
要开始对此进行诊断,请使用 SDK 的 Dumpbin.exe 工具。首先运行这个:
Dumpbin /exports Blah.dll
并查看出口清单。您应该看到序数以及名称。如果一切顺利,请运行
Dumpbin /imports Blah.dll
获取依赖项列表。很有可能它依赖于另一个 DLL 中的函数,这个 DLL 没有这个 DLL。反正是这样的。您可以通过使用 DependencyWalker 工具来减少工作量。如果第一步失败,那么在构建 DLL 时就会出现严重错误。如果第二步失败,那么您可能正在查看某种 DLL Hell 问题。
您确定此错误来自 LoadLibrary 吗?Windows DLL 允许您按名称和序数值指定导出。也就是说,每个功能都可以用一个数字来标识。如果您调用 GetProcAddress 并指定无效的序数,那么您将收到此错误。
我最好的猜测是,您正在加载的 DLL 在其 DllMain 中调用 GetProcAddress 并指定了一个无效的序数。这会导致它失败,并且当您调用 GetLastError 时,您会得到 ERROR_INVALID_ORDINAL,因为这是发生的最后一个错误。