2016-01-26 2 views
-1

Я видел нескольких людей с аналогичной проблемой, но до сих пор ни один из этих исправлений не работал.Не удается запустить C++ clr dll из C# - Dll Unloaded?

У меня есть приложение C# (формы Windows) и/я пытаюсь использовать dll C++ clr. Кажется, что dll загружается нормально, я могу создать и запустить приложение, однако, если я вызову в dll, программа выдает исключение FileNotFound «Не удалось загрузить файл или сборку« MyLibrary.dll »или одну из его зависимостей. не найден. ":" MyLibrary.dll ".

Последняя ошибка 1008, Error_No_Token

библиотека DLL находится в папке с ехе.

Я изучал вещи с помощью peverify и ildasm, но не нашел там никаких проблем.

Я побежал зависимость ходок на нее и увидел эту необычную последовательность в журналах:

Разгрузка «MYLIBRARY.DLL» по адресу 0x00007FFB93400000.

LoadLibraryExW ("C: \ source \ tools \ ToolItemProj \ ToolItem \ ToolItem \ bin \ x64 \ Debug \ MyLibrary.dll", 0x0000000000000000, LOAD_WITH_ALTERED_SEARCH_PATH) возвращает NULL. Ошибка: указанный модуль не найден (126).

Я запустил ProcMon и придумал несколько вариантов, большинство из них преуспевают, но QuerryAllInformation имеет ошибку BufferOverflow и CreateFileMapping не удалось (один раз) с FileLockedWithOnlyReaders (Затем он снова запущен и преуспел). Создание INI также показалось неудачным с NameNotFound.

Похоже, что он выгружает DLL во время выполнения из-за переполнения буфера. Но как я его отслеживаю? У кого-нибудь есть опыт?

+1

Обычно «Указанный модуль не найден» предлагает некоторые библиотеки DLL. Правильно ли установлен ваш vcredist (x64)? Является ли dll C++ зависящим от чего-либо, что вы могли бы забыть поставить под своим каталогом сборки или поисковым путем? Кроме того, C++ dll скомпилирована в x64? – evertqin

ответ

-1

Это решение было решено. В dll есть еще одна dll, которой у меня не было. Я смог отслеживать эту DLL через оригинального разработчика.

+0

Для таких случаев инструмент «Уклонение зависимостей» неоценим. Он поставляется со многими версиями Windows SDK (ранее SDK платформы), а также доступен отдельно по адресу http://www.dependencywalker.com. Вы сказали, что уже используете его ... Я бы предложил не просто посмотреть журнал, но и на статический анализ, который он выполняет при открытии библиотеки DLL. Он прочитает список импорта и скажет вам, какие DLL нужны, но не найдены, а также покажет вам информацию о версии для найденных (в случае несоответствия версии ваша проблема). –

Смежные вопросы