2013-06-24 54 views
0

我有一個x64位託管項目,調用x64位C++ DLL。這在Visual Studio 2010中運行良好。但是,如果將C++項目升級到Visual Studio 2012,我不能再調用x64位DLL,並且我收到錯誤x64從x64調用的C++ DLL託管代碼

嘗試使用格式不正確。 (異常來自HRESULT:0x8007000B)

該項目在Visual Studio 2010的工作巨大的,如果我沒有允許Visual Studio項目升級到Visual Studio 2012和編譯和鏈接在Visual Studio 2010中的C++ DLL比一切都很好。

我的問題是改變了什麼來打破這段代碼。我假設一些一般類型已經改變,這將需要我的部分進行修改。打破第一個函數簽名是:

在C調的簽名是:在C++

internal static extern int ReverseBottomToTop(IntPtr imgptr, int nrows, int ncols) 

簽名是:

int ReverseBottomToTop(unsigned char *imgptr, int nrows, int ncols) 
+0

可能重複[「嘗試加載程序的格式不正確」即使平臺是相同的](http://stackoverflow.com/questions/2023766/an-attempt-was-made-加載一個不正確格式的程序 - 甚至當這個p) – stijn

+0

似乎不是一個_exact_重複,但答案在那裏:你在某種程度上混合平臺 – stijn

+0

C#項目有一個新的在VS2012中設置平臺目標的方法。它在以前的版本中不存在,所以有些可能性設置錯誤,特別是因爲默認設置是錯誤的。用鼠標右鍵單擊您的C#EXE項目,屬性,生成選項卡。取消「首選32位」選項。 –

回答

0

您可能要仔細檢查項目設置。在C#項目中,實際上有三個相關位置需要查看(解決方案配置,解決方案配置到項目配置的映射以及在「平臺目標」下的「構建」部分的項目屬性頁面上定義的項目配置的實際含義) 。通常,您得到的錯誤是正確的,因爲它表示所涉及的二進制文件之間的平臺不匹配。

您可能需要運行corflags.exe來查看.Net二進制文件是否確實是x64/AnyCPU版本。在C++ DLL上,依賴關係者可以告訴你該DLL的結構。