Исключение BadImageFormatException или System.Исключение DllNotFoundException При попытке запустить проект c #

#c# #.net #dll #visual-studio-2013 #leptonica

#c# #.net #dll #visual-studio-2013 #лептоника

Вопрос:

Я создал библиотеку DLL cpp с настройками диспетчера конфигурации вывода, как показано на снимке

снимок.

Он успешно собран и создается dll.Затем, чтобы использовать его, я написал проект c #, который включает в себя dll следующим образом

 [System.Security.SuppressUnmanagedCodeSecurity]
[DllImport(@"somePathImgProcessorTrial.dll", EntryPoint = "ImgProc")]
 

После этого я построил его с конфигурацией, как показано на рисунке

consumer_configuration

Когда я пытаюсь запустить это приложение, я получаю следующий вывод в консоли.

 BadImageFormatException: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)
 

После этого, когда я меняю конфигурации сборки и пытаюсь собрать его снова, проект cpp не строится и выдает много ошибок типа, приведенного ниже.

 unresolved external symbol for all functions of leptonica library
 

Эта конкретная библиотека leptonica и все необходимые библиотеки создаются индивидуально на 64-разрядной машине.Когда я пытаюсь изменить конфигурации проекта c #, я получаю исключение

 DLLNotFoundException
 

Что я делаю в проекте, так это вызываю функции dll для чтения изображения и манипулирования им.Я думал, что это связано с форматом изображения, которое я пытаюсь прочитать.Итак, я попытался запустить приложение с .jpeg и .tif, но всегда с одним и тем же выводом.Я делаю все это в Visual Studio 2013 и framework 3.5 на 64-разрядной машине.Каково точное значение исключения BadImageFormatException и как его решить?Это проблема с кодом или проблема с архитектурой?

Комментарии:

1. попробуйте установить plateforme как x86 или x64 вместо любого процессора

2. значение x64 выдает исключение DllNotFoundException, а значение x86 приводит к тому же результату, что и BadImageFormatException

3. поэтому сохраняйте настройки x64. где ваша dll? попробуйте внутри папки bin проекта c #.

4. Пожалуйста, предоставьте ответ, если у вас есть абсолютное представление о том, в чем проблема

5. Стандартная ошибка, имя платформы в этом диалоговом окне не имеет смысла для программ .NET. Щелкните правой кнопкой мыши свой EXE-проект, Свойства, вкладка «Сборка». Установите там целевую платформу, вам нужно отметить опцию «Предпочитаю 32-разрядную», чтобы она была совместима с вашими 32-разрядными библиотеками DLL C .

Ответ №1:

BadImageFormat не связан с .jpeg или .tif…

BadImageFormat

Это исключение возникает, когда формат файла библиотеки динамических ссылок (.dll-файл) или исполняемого файла (.exe-файл) не соответствует формату, ожидаемому средой выполнения common language.

В вашем случае вы вызываете DLL, которая сама по себе 64-разрядная, поэтому вам нужно скомпилировать свой проект до x64. Вы получаете BadImageFormat при ориентации на x86