2012-09-18 47 views
11

我設計了一個C#的Windows申請也內部調用一些功能要遠[通過的DllImport從C++ DLL進口的()]一個試圖加載程序格式不正確的例外與VS安裝

我C++代碼在Win32平臺中構建爲.DLL,而我的C#構建爲「任何CPU」平臺。

當我在我的測試機運行.EXE(C#),我的臉,

有人企圖從HRESULT格式不正確 例外加載程序0x8007000B

錯誤

但是,如果我在機器上安裝VSS 2010,然後運行EXE,則不會出現此錯誤。

1)此錯誤的原因是什麼? 2)爲什麼安裝VSS時未發現錯誤?

我使用Win7操作系統(64位),以生成.exe(C#)在AnyCPU平臺,而這又取決於一個DLL(C++ DLL引入使用的DllImport C#)建於的Win32

+0

我想這是一個位不匹配的錯誤 - 您的.dll是32位,您的.exe是64位或其他方式。 VS安裝了一大堆東西,儘管我不知道如何解決你的問題。 – dandan78

+0

任何人都可以幫忙嗎? –

+0

請更新您的問題以包含操作系統,.dll位和.exe位。另外,請檢查您的構建設置並強制.Net部分以匹配您的.dll的位數。 – dandan78

回答

10

這幾乎總是因爲你從64位dll/exe等調用32位代碼或從32位dll調用64位dll。如果您爲x86構建c#會發生什麼?它仍然會在64位上運行。

+0

我仍然想知道,因爲測試機器是32位的,當我在平臺中選擇Win32時,C++ dll是如何生成爲64位的。 當我使用x86(而不是任何CPU)時,此問題已解決。這裏詳細說明了什麼問題? –

+0

任何CPU都意味着框架將確定在應用程序啓動時是以64位還是32位運行。我本來希望測試機器是64,因此無法在運行時調用32位C++ dll。 –

+0

Dll構建爲Win32,EXE構建爲裝有VS的x86bit機器上的任何CPU平臺(在VSS中)。現在,測試機器具有運行此應用程序的x86版本的操作系統。由於所有東西都是x86,所以64位正在投入使用。 –

相關問題