2013-05-02 78 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專業版中創建一個新的項目;我的電腦運行Windows 8 64位。 我添加了所有.cs文件,並且還複製了我在註冊後從佳能網站下載的所有dll文件。

我第一次運行該程序並單擊連接按鈕時,發現一個DLL丟失的異常。由於無法添加引用的dll,因此我將它們複製到Debug目錄。

缺少DLL是PRSDK.dll,所以我找到並下載了DLL,並將其複製。

現在,當我點擊連接按鈕,我得到一個不同的異常:

BadImageFormatException:試圖加載程序格式不正確。 (異常來自HRESULT:0x8007000B)

唯一的例外是在文件Camera.cs,就行了:

err = prAPI.PR_StartSDK(); 

我用Google搜索這個異常,並發現,一些人已經改變了項目平臺和目標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,它們是具有.dll擴展名的html文件。顯然你試圖從某個網頁上下載它們,但沒有成功。

嘗試重新下載它或從官方(Canon)源獲取SDK。

+1

這很搞笑。對自己不要下載他的解決方案並看着dll感到羞恥。偶爾我會得到下載的mp3,這些mp3實際上是帶有mp3擴展名的404頁面;從未在dll下載中看到它。 :D(雖然,有點蹩腳的.net,它不區分「試圖加載這個dll,但它是錯誤的格式」,vs「試圖加載這個DLL,你給我什麼廢話,這是不是甚至沒有DLL!「) – neminem 2013-05-02 18:08:24

+0

Carko哪些文件不是.dll?我在PRSDK.dll和DPPDLL.dll上做了屬性,例如這兩個dll文件,我在屬性中看到:應用程序擴展名(.dll)是否可以請你指定哪些文件不是.dll我的意思是不是真的dll,你是怎麼做到的設法發現他們不是DLL,所以我會知道在未來做到這一點? – 2013-05-02 18:10:11

+0

Carko你的意思是這兩個文件是不是真的DLL? PRLIB.dll和PRSDK.dll – 2013-05-02 18:11:27

1

你一定錯過了一些東西。這個錯誤肯定是說你的項目的平臺和外部DLL的平臺不匹配。

也許您更改了「主動解決方案平臺」,但沒有更改「項目平臺」。

+0

嘗試任何平臺和目標:x86然後x64然後所有平臺。在任何地方改變沒有任何工作。有人可以從我的skydrive下載該項目並試用它,也許可以找出問題/解決方案? – 2013-05-02 17:41:07

1

有一件事讓我不知道這件事,不久之前:請檢查以確保(Build-> Configuration Manager),在您的解決方案中,當您將解決方案的平臺更改爲x86時,實際項目的平臺在那個對話框實際上被設置爲x86。有時VS是愚蠢的,並且將它保留爲任何CPU(如果你的所有代碼和所有第三方DLL都是託管的,那麼它就不是很好,例如,對於非託管相機dll的包裝。)

這可能是一個完全不相關的事情正在進行,但每次我看到這個錯誤,這是因爲你正在運行x86/x64並加載一個非託管dll,這是另一種平臺類型。

0

一個原因是您可能試圖將32位程序集加載到64位應用程序中。當您有選擇任何CPU平臺時,可能會發生這種情況。

my blog我概括這個問題上多與截圖上,你可以如何改變它

但基本上你可以設置你的項目總是在32位模式下進行編譯。