我有一個使用C/C++編寫的非託管32位庫的C#(.NET 3.5,VS2005專業版)應用程序。我使用的API是這樣的:非託管dll代碼
void * Initialize(int x);
voic GetData(void *);
而這作品時,我的Windows XP 32位運行,但在Windows XP64bit它拋出異常:
未處理的異常:System.Reflection.TargetInvocationException:異常已通過調用的目標引發異常。 ---> System.BadImageFormatException:試圖加載格式不正確的程序。 (異常來自HRESULT:0x8007000B) 在Aktuelizator.CommonLibrary.InitializeRingBuffer(的Int32暗) 在Aktuelizator.AktuelizatorWService.AktuelizatorWS..ctor()
這些非託管的DLL的下64位XP的工作從32位調用時取消管理在C應用程序writetn/C++。
有沒有人有任何想法?
是的,但它在從XP64bit上運行的32位編譯應用程序中調用時起作用。可以不用重新編譯dll來完成? – Mita 2009-04-16 10:24:02
在64位操作系統上運行的32位可執行文件認爲它運行在32位的世界 - 谷歌「WOW64」的更多。嘗試從32位環境(例如C:\ Windows \ SysWOW64 \ cmd.exe)啓動應用程序,因此該過程將是32位的,如DLL。 – eran 2009-04-16 11:06:43
順便說一句,我的建議適用於你必須做的應用程序和DLL你有,因此需要一個解決方法。如果您可以重建應用程序,Stephen Martin的解決方案將解決問題而不是繞過它。 – eran 2009-04-16 11:17:21