2016-08-25 7 views
-1

Может ли кто-нибудь помочь со следующей ошибкой, пожалуйста?Ошибка приложения. Приложение не смогло начать правильно (0x000007b) .Click Ok, чтобы закрыть приложение

'WidgetKeyboard.exe': Loaded 'C:\Windows\SysWOW64\wsock32.dll', Cannot find or open the PDB file 
'WidgetKeyboard.exe': Loaded 'C:\Windows\SysWOW64\ws2_32.dll', Cannot find or open the PDB file 
'WidgetKeyboard.exe': Loaded 'C:\Windows\SysWOW64\msvcrt.dll', Cannot find or open the PDB file 
'WidgetKeyboard.exe': Loaded 'C:\Windows\SysWOW64\rpcrt4.dll', Cannot find or open the PDB file 
'WidgetKeyboard.exe': Loaded 'C:\Windows\SysWOW64\sspicli.dll', Cannot find or open the PDB file 
'WidgetKeyboard.exe': Loaded 'C:\Windows\SysWOW64\cryptbase.dll', Cannot find or open the PDB file 
'WidgetKeyboard.exe': Loaded 'C:\Windows\SysWOW64\sechost.dll', Cannot find or open the PDB file 
'WidgetKeyboard.exe': Loaded 'C:\Windows\SysWOW64\nsi.dll', Cannot find or open the PDB file 
'WidgetKeyboard.exe': Loaded 'C:\Suneel\Keyboard\WidgetKeyboard\Debug glsdll md\iconv.dll', Binary was not built with debug information. 
'WidgetKeyboard.exe': Loaded 'C:\Suneel\Keyboard\WidgetKeyboard\Debug glsdll md\zlib1.dll', Binary was not built with debug information. 
The program '[6452] WidgetKeyboard.exe: Native' has exited with code -1073741701 (0xc000007b). 

ответ

1

Вы не даете нам много для начала. Очевидно, вы используете DllImport в .NET (я догадался, что из тега исправьте меня, если я ошибаюсь).

0xc000007b означает STATUS_INVALID_IMAGE_FORMAT, и вы, вероятно, пытаетесь загрузить 32-разрядное изображение в 64-разрядный процесс или наоборот.

Обычно Windows пытается предотвратить это от когда-либо происходящего. Виртуализация файловой системы гарантирует, что загрузка DLL из C: \ Windows \ system32 перенаправляется на C: \ Windows \ syswow64, а виртуализация реестра гарантирует, что серверы COM будут сопоставляться с битостью COM-клиента.

Возможно, что-то, что вы делали, обходит эти контрмеры. Возможно, вы скопировали DLL в ту же папку, что и ваш EXE. Или разрешение DLL-пути идет не так, например. потому что вы полагаетесь на переменную среды PATH системы или используете SetDllDirectory().

Прежде всего, убедитесь, что битность вашего приложения соответствует битности DLL, которую вы импортируете. Если это не удается, используйте ProcMon SysInternals, который показывает, какой файл он пытается загрузить.

+0

Я использовал правильную часть библиотек проблема, которую я вижу, с libiconv. Всякий раз, когда моя программа запущена, она просит найти файл iconv.dll, скачав 64-битные библиотеки из https://sourceforge.net/projects/mingw-w64 /? source = typ_redirect и поместили .dll с правильным названием как .iconv.dll и во время работы увидели эту ошибку. Единственное, что мне теперь нужно сделать, это «http://www.bitdefender.com/files/KnowledgeBase/file/dlls_x64.zip» заменить эти файлы ... это единственный вариант, который кажется оставленным, пожалуйста, предложите –

+0

. собственный процесс 64-битный? Вы проверили Process Monitor? Имеет ли загруженную версию правильную битовость? Что произойдет, если вместо правильной установки DLL вместо вашей системы вместо правильной установки? –

+0

Да мой 64-битный процесс, также есть хост зависимостей, единственная ошибка, которую я мог видеть в ходу зависимости, - «IESHIMS.DLL - Ошибка открытия файла. Система не может найти указанный файл (2)», загруженную версию iconv .dll верна или нет. Я не мог проверить ее, могу ли я узнать, как проверить, является ли она 32-битной/64-битной? Также не уверен: «Что произойдет, если вы поместите правильную версию DLL в свою систему вместо ручного вместо загрузки?», Как это сделать ... извините за дополнительные запросы, поскольку я новичок в отладке в Windows, у меня есть только Linux навыки отладки с использованием gdb –

0

Это код ошибки NTSTATUS. Смотрите здесь: https://msdn.microsoft.com/en-gb/library/cc704588.aspx

В вашем случае 0xC000007B is STATUS_INVALID_IMAGE_FORMAT. Описано вот так:

{Bad Image}% hs либо не предназначен для работы в Windows, либо содержит ошибку. Попробуйте снова установить программу, используя исходный установочный носитель, или обратитесь за помощью к системному администратору или поставщику программного обеспечения.

Обычно это означает, что загрузчик при разрешении зависимостей времени загрузки пытается загрузить 64-разрядную DLL в 32-разрядный процесс или наоборот. Диагностика, которую вы показываете, показывает, что ваш процесс представляет собой 32-битный процесс. Поэтому вы должны искать 64-битную DLL, которую загрузчик пытается загрузить. Используйте инструмент Dependency Walker в режиме Profile для его отладки.