我們有一個必須與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
A
回答
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 validator和check the magic number。
具體而言,請在執行更深入的驗證之前查看每個文件是否以0x10b
或0x20b
作爲第一個檢查開始。您可以使用(now-discontinued)PEiD之類的工具輕鬆完成此操作。
正如勘誤中提到的那樣,當您期待32位時,您的某個二進制文件極有可能是64位。使用a debugger that can resolve dependencies可能最容易找到,儘管這可能不合法。
相關問題
- 1. asp.net中的64位和32位機器
- 2. 32位和64位SWT之間的性能差異是什麼?
- 3. 32位和64位.NET(4)應用程序之間的差異
- 4. 在32位和64位機器中總是長64位
- 5. 32或64位機器
- 6. 在64位機器上生成32位
- 7. 32位和64位Windows之間的日期間粒度
- 8. 64位機器上的SQL Server 2012 32位或64位?
- 9. 32位系統中的32位和64位之間的操作(sint/uint)
- 10. 32位和64位的ODP.NET
- 11. Solr索引時間32位和64位
- 12. 的Recv()的行爲32位和64位操作系統之間的差異
- 13. JDK 32位和64位之間的區別
- 14. IPC之間的32位和64位升壓過程
- 15. 32位和64位Excel 2007之間的區別
- 16. 64位和32位應用程序之間的橋樑
- 17. 32位Linux與64位Linux和MPFR之間的long long int
- 18. 32位和64位系統之間的通信
- 19. 如何處理32位和64位環境之間的Interops?
- 20. 32位和64位應用程序之間的COM互操作
- 21. 64位debian和32位酒
- 22. C# - 在32位和64位
- 23. 在32位和64位
- 24. 32位和64位性能
- 25. ODBC .NET 32位和64位
- 26. Gluegen 32位和64位庫
- 27. Java 32位和64位
- 28. 32位和64位CPU/OS
- 29. 我的機器和我的Java 32位或64位?
- 30. 在同一臺機器上Python和oracle 32位和64位instaclient
你有x86客戶機庫除了x64的? – 2012-03-15 21:20:53
是的,我們確保客戶端的機器上安裝了32位版本,起初我們試圖將IBM.Data.DB2.Iseries dll與安裝程序一起包含進去,但這並沒有起作用 – Anthony 2012-03-15 21:29:06
Pretty classic IBM的問題。該公司從支持電話中生存下來。 – 2012-03-15 22:57:15