#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")]
После этого я построил его с конфигурацией, как показано на рисунке
Когда я пытаюсь запустить это приложение, я получаю следующий вывод в консоли.
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…
Это исключение возникает, когда формат файла библиотеки динамических ссылок (.dll-файл) или исполняемого файла (.exe-файл) не соответствует формату, ожидаемому средой выполнения common language.
В вашем случае вы вызываете DLL, которая сама по себе 64-разрядная, поэтому вам нужно скомпилировать свой проект до x64. Вы получаете BadImageFormat при ориентации на x86