2012-03-15 74 views
2

我們有一個必須與AS400通信的winforms應用程序。爲此,我們在Winforms應用程序中導入了IBM.Data.DB2.iSeries類,並在我們的機器上安裝了IBM System I Access for Windows。它必須具有System I Access系統,否則它將不會與AS/400通信。一切工作正常我的64位開發機器。它也可以在客戶端的64位機器上正常工作。但是,當我們嘗試在32位機器上安裝它時,我們會看到一個壞圖像格式異常。我們試着只做一個x86安裝程序而不是任何cpu,但沒有奏效(同樣的壞圖像異常)。有任何想法嗎?32位和64位機器之間的不良圖像格式異常

+2

你有x86客戶機庫除了x64的? – 2012-03-15 21:20:53

+0

是的,我們確保客戶端的機器上安裝了32位版本,起初我們試圖將IBM.Data.DB2.Iseries dll與安裝程序一起包含進去,但這並沒有起作用 – Anthony 2012-03-15 21:29:06

+3

Pretty classic IBM的問題。該公司從支持電話中生存下來。 – 2012-03-15 22:57:15

回答

5

即使您已將程序編譯爲32位,但它仍在嘗試加載64位dll。既然你說第三方的dll是32位的,剩下的就是你自己的dll了。

您可以驗證通過將解決方案平臺設置爲x86。然後檢查所有項目(exe和dll)是否設置爲x86。我懷疑其中一個平臺的目標設置爲x64。您通過右鍵單擊項目,選擇屬性,生成選項卡 ​​- >平臺目標來檢查它們。

同時確保所有的DLL實際設置在Configuration Manager建設(選擇「配置管理器...」從菜單欄中的解決方案平臺下拉。

+0

發現我們不知道的x64 dll在那裏 – Anthony 2012-03-26 15:03:28

2

我不確定你的程序集有什麼問題,但我的建議是嘗試從你的版本中生成可執行文件和動態庫文件的PE file validatorcheck the magic number

具體而言,請在執行更深入的驗證之前查看每個文件是否以0x10b0x20b作爲第一個檢查開始。您可以使用(now-discontinued)PEiD之類的工具輕鬆完成此操作。

正如勘誤中提到的那樣,當您期待32位時,您的某個二進制文件極有可能是64位。使用a debugger that can resolve dependencies可能最容易找到,儘管這可能不合法。