我有一個可以爲x86和x64目標構建的非託管VC++項目。它正在被任何CPU編譯的.NET程序使用。這是在VS2010上,但當解決方案使用VS2008和vcbuild構建時,我遇到了同樣的問題。在x64上構建VC++項目,無法在x86上執行
這裏是我的構建腳本編譯命令:
msbuild .\Project.vcxproj /t:Build /p:PlatformToolset=v100 /p:Configuration=Release /p:Platform=%platform%
如果在x86機器上生成,用%平臺(%)= Win32中,一切都建立並執行罰款
如果在x64機器上建立,使用%platform%= x64,所有內容都會生成並執行正常。但是,如果我使用%platform%= Win32在x64機器上構建,那麼它將成功構建而不會出錯。但是,當我那些所謂-x86二進制文件複製到x86機器,它們會導致以下錯誤:
System.Runtime.InteropServices.SEHException was caught
Message=External component has thrown an exception.
跟蹤該錯誤回到C++ DLL,它沒有在這條線:
if (FAILED(g_Connection.CreateInstance(_T("ADODB.Connection"))))
ThrowException(_T("Cannot create connection."));
我已經通過我的.vcxproj文件查找問題,但一切似乎都正確。沒有導入的屬性文件或自定義生成任務或類似的東西。
這是由於我們試圖使用單個x64構建服務器爲兩個平臺創建構建而引發的問題。我們目前的解決方法包括在兩臺不同的機器上預先構建C++ dll。
您可以發佈嘗試在x86機器上運行時遇到的運行時錯誤嗎? – Jacob 2011-04-06 17:56:34
「顯然不能裝載」。 – 2011-04-06 18:13:52
仔細一看,它拋出了一個SEHException,所以它看起來像C++的DLL正在被正確加載,但拋出一個異常,創建一個對象。我認爲這是一個依賴性問題,而不是C++ dll本身的問題。 – 2011-04-06 18:19:01