2015-05-04 145 views
0

我們有一個運行了一段時間的WebService,其上有大約6個項目。 最近,我們不得不支持一個C++ 32位庫,我測試過,我不得不將項目的目標平臺設置爲x86或者我會得到BadImageFormatException。所以這個新項目被設置爲在x86上進行編譯,但其他一切都設置爲AnyCPU。是否可以在C#項目中混合使用x64/x86?

發佈WebService後,調用該函數時出現錯誤Unable to find ?.dll

是否有無論如何我可以添加這個新的項目爲x86,而無需將我的WCF設置爲x86,或者我做錯了什麼,這應該工作?

回答

1

這是可能的但全部二進制文件(.exe-s和.dll -s)必須共享相同的目標平臺才能工作。您無法將32位DLL加載到64位進程中或以其他方式加載。

如果您在IIS下託管您的Web服務,則應用程序池的目標平臺將確定可以加載哪種類型的DLL。

如果您已在非託管DLL-s中導出函數,則您的P/Invoke聲明還必須與目標平臺匹配 - 特別是,如果您傳遞指針,則必須將它們正確映射到32/64位指針。 (通常IntPtr負責這個。)如果您使用單一源代碼庫(編譯爲特定於平臺的二進制文件)支持兩種平臺,則P/Invoke聲明真的會變成可能的問題。

根據您要做的事情,您可能還需要處理特定於平臺的引用。這question有更多的細節。

相關問題