2013-05-02 6 views
2

У меня есть образец кода, который должен обнаружить мою камеру canon 550d, поэтому я могу управлять камерой с компьютера. Я просто скачал исходные файлы отсюда:Почему я получаю badimagexception?

http://www.codeproject.com/Articles/17344/A-wrapper-for-the-canon-CDSDK-and-PRSDK-for-remote?fid=379739&df=90&mpp=25&noise=3&prof=False&sort=Position&view=Quick&spc=Relaxed&fr=1#xx0xx

я создал новый проект в Visual Studio 2012 Pro; мой компьютер работает под управлением Windows 8 64 бит. Я добавил все файлы .cs, а также скопировал все файлы dll, загруженные с веб-сайта Canon после регистрации.

В первый раз, когда я запустил программу и нажал кнопку подключения, у меня появилось исключение, из-за которого dll отсутствует. Поскольку нет способа добавить DLL в качестве ссылки, я скопировал их в каталог Debug.

Отсутствует dll был PRSDK.dll, поэтому я нашел и скачал dll и скопировал его.

Теперь, когда я нажимаю на кнопку подключения, я получаю другое исключение:

BadImageFormatException: Была сделана попытка загрузить программу, имеющую неверный формат. (Исключение из HRESULT: 0x8007000B)

Исключения находится в файл Camera.cs, ​​на линии:

err = prAPI.PR_StartSDK(); 

Я гугл для этого исключения и обнаружил, что некоторые люди изменили платформу проекта и цели в x86, поэтому я попробовал - я попытался изменить его на x86, x64, AnyCpu, все, но это не помогло.

Возможно, файл PRSDK.dll устарел и не используется в Windows 8?

Это ссылка на мой проект/решение на моем SkyDrive, если кто-то может загрузить его и попытаться запустить его на своей машине и, возможно, найти решение?

https://skydrive.live.com/redir?resid=EB1C71C44C3976D5!201&authkey=!AErpIgyllPAgH9w

Проект под названием: Canon_Camera_Control

ответ

7

ОК, я скачал ваш проект и нашел проблему.

Ваши DLL-файлы ошибочны!

Это даже не DLL, а html-файлы с расширением .dll. Очевидно, вы пытались загрузить их с некоторых веб-страниц, но не удалось.

Попробуйте перезагрузить или получить SDK из официальных источников (Canon).

+1

Это весело. Позор для себя за то, что вы не загрузили его решение и посмотрели на DLL. Я получаю это иногда с загруженными mp3, которые были на самом деле 404-ю страницами с расширением mp3; никогда не видел его при загрузке dll. : D (хотя, вроде бы, lame of .net, что он не различает «пытался загрузить эту dll, но это был неправильный формат», vs «пытался загрузить эту DLL, и что дерьмо вы мне дали, это isn 't даже dll! ") – neminem

+0

Carko, в каких файлах нет .dll? Я сделал свойства на PRSDK.dll и на DPPDLL.dll, например, два файла dll, и я вижу в свойствах: расширение приложения (.dll), можете ли вы указать, какие файлы не являются .dll, я имею в виду не реально dll и как вы удается найти, что они не dll, поэтому я буду знать, чтобы сделать это в будущем? –

+0

Carko, вы имеете в виду эти два файла, которые не являются реальной dll? PRLIB.dll и PRSDK.dll –

1

Вы должны что-то пропустил. Ошибка, безусловно, та, которая утверждает, что платформа вашего проекта и одна из внешних dll не совпадают.

Возможно, вы изменили «Активную платформу решения», но не «Платформа проекта».

+0

Пробовал любые платформы и цели: x86, затем x64, затем все платформы. нигде не изменилось. Может кто-нибудь, пожалуйста, загрузите проект с моего skydrive и попробуйте его, и, возможно, узнать проблему/решение? –

1

Одна вещь, которая не так давно подтолкнула меня к этому вопросу: убедитесь, что (Build-> Configuration Manager), что в вашем решении, когда вы меняете платформу решения на x86, платформа вашего реального проекта в этом диалоге фактически установлено значение x86. Иногда VS является немым и оставляет его как Any CPU (отлично, если все ваши коды и все ваши DLL-файлы сторонних разработчиков управляются, не так здорово, если вы вызываете, например, оболочку для неуправляемой DLL-камеры.)

Возможно, что-то совершенно несвязанное происходит, но каждый раз, когда я видел эту ошибку, это потому, что вы работаете как x86/x64 и загружаете неуправляемую dll, которая относится к другому типу платформы.

0

Одна из причин заключается в том, что вы можете загрузить 32-разрядную сборку в 64-разрядное приложение. Это может произойти, если у вас установлена ​​. Любая платформа.

На my blog я обрисовать этот вопрос более скриншотами о том, как вы можете изменить его

, но в основном вы можете настроить свой проект всегда компилировать в 32-битном режиме.

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