Что именно означает ERROR_INVALID_ORDINAL? - PullRequest
3 голосов
/ 17 августа 2010

Функция LoadLibrary возвращает мне код ошибки 182. Из MSDN:

ERROR_INVALID_ORDINAL: «Операционная система не может запустить% 1»

У кого-нибудь есть лучшее описание того, что это за ошибка?

Ответы [ 2 ]

3 голосов
/ 17 августа 2010

Очень неясная ошибка. Однако термин «порядковый номер» тесно связан с DLL. DLL содержит список экспортируемых функций, а также список импортируемых функций. Другие библиотеки DLL, от которых он зависит. Этот экспорт и импорт обычно имеют имя, но это не обязательно. У них всегда есть номер, номер является «порядковым».

Чтобы начать диагностику, используйте инструмент SDK Dumpbin.exe. Запустите это сначала:

Dumpbin /exports Blah.dll

и посмотрите список экспорта. Вы должны увидеть порядковый номер, а также имя. Если все получилось, запустите

Dumpbin /imports Blah.dll

чтобы получить список зависимостей. Хорошие шансы, что она зависит от функции в другой DLL по числу, которого у этой библиотеки нет. Как-то так или иначе. Вы можете сделать его менее трудоемким, используя инструмент DependencyWalker. Если первый шаг не удался, то что-то пошло не так, когда была построена DLL. Если второй шаг не удался, вы, вероятно, смотрите на какую-то проблему с DLL-адом.

0 голосов
/ 17 августа 2010

Вы уверены, что эта ошибка исходит от LoadLibrary?Библиотеки Windows позволяют указывать экспорт по имени и порядковому значению.То есть каждая функция может быть идентифицирована номером.Если вы вызовите GetProcAddress и укажете неверный порядковый номер, вы получите эту ошибку.

Мое лучшее предположение - то, что загружаемая вами DLL вызывает GetProcAddress в своем DllMain и указывает неверный порядковый номер.Это приводит к сбою, и когда вы вызываете GetLastError, вы получаете ERROR_INVALID_ORDINAL, так как это последняя произошедшая ошибка.

...