DLL отложенной загрузки: «Исключение 0xC06D007E: модуль не найден», когда приложение запускается несколько раз - PullRequest
2 голосов
/ 25 ноября 2011

У меня есть случайный сбой в моем приложении, когда мы используем Delay Load DLL.Есть несколько разных стеков вызовов, в которых мы видели сбой, но он всегда вылетает при повышении 0xC06D007E: Module not found в __delayLoadHelper2.

Исключение возникает при вызове процесса несколько раз подряд (последовательно).Вот пример стека вызовов:

KERNELBASE.dll!RaiseException()  + 0x3d bytes   
MYDLL.dll!__delayLoadHelper2(const ImgDelayDescr * pidd=0x000000000012f650, __int64 (void)* * ppfnIATEntry=0x000000000012f570)  Line 331    C++
MYDLL.dll!__tailMerge_MyDelayLoadDLL_dll()  + 0x3f bytes    Unknown
MYDLL.dll!MyUserFunction()  Line 91 + 0x5 bytes C++

Приложение c ++ использует Delay Load DLL для загрузки кода .NET.

Компьютер, на котором происходит сбой, является очень мощным компьютером (12 ядер).CPU, 48 гигабайт оперативной памяти), я не уверен, влияет ли это на него.Но поскольку сбой происходит не всегда, он выглядит как состояние гонки или проблема с ресурсами.

Эта ветка форума описывает мой случай, но решения не найдено.

Есть идеи, почему это может происходить?

Ответы [ 2 ]

0 голосов
/ 04 мая 2017

У меня была эта проблема, когда я пытался запустить отладочную версию моей программы на другом компьютере, на котором НЕ было отладочной версии среды выполнения Visual Studio C ++ на этом компьютере. (Отладочные библиотеки часто называются немного по-другому с дополнительным «D» где-то в имени сборки)

Конфигурация выпуска моей программы работала нормально, потому что у меня были распространяемые среды выполнения VS C ++.

Для полноты изложения я поставлю очевидный ответ на этот вопрос, но я искренне не хочу, чтобы он казался снисходительным ... Загрузчик модулей не смог найти модуль, от которого он зависел! Чем больше я устраняю неполадки, подобные этим, я все больше и больше говорю себе «верю сообщению об ошибке»

В этом случае вашим другом должен быть Dependency Walker (зависимость.exe), хотя я не могу с уверенностью сказать, как он справляется с задержкой загрузки модулей.

0 голосов
/ 31 мая 2012

У меня такая же ошибка в моем приложении, и стек вызовов точно такой же. Однако мой сбой отличается тем, что нативная DLL имеет зависимость от загрузки с задержкой от другой нативной DLL.

Я бы никогда не задержал загрузку сборки .NET. Сборки .NET должны загружаться с использованием функций загрузчика управляемых сборок. Их также не следует загружать, вызывая для них LoadLibrary.

В конце концов, я не уверен, что является причиной сбоя, но я бы вообще убрал задержку загрузки для сборки .NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...