2012-03-21 46 views
1

我試圖編寫一個簡單函數來從託管代碼調用非託管代碼。數據類型是int(這應該使它更簡單)。該功能是本Int值無法在託管代碼和非託管代碼之間正確編組

extern "C" MYTEST_API int myTestFunction(int a, int b) 
{ 
    return a*b; 
} 

託管代碼看起來像

[DllImport("myTest.dll", CallingConvention = CallingConvention.Cdecl)] 
    private static extern int myTestFunction(int a, int b); 
... 
    int p1 = 2; 
    int p2 = 3; 
    int result = myTestFunction(p1, p2); 
    Console.WriteLine("C++ int: " + result); 

當我運行程序,結果返回爲

C++ int: 12977616 

所以,我不知道什麼是錯怎麼辦我聲明或傳遞int參數。我嘗試傳遞參數爲「單一」,該版本的工作。

+1

正確檢查您的C++代碼。也許你錯過了一些東西,因爲這種映射是正確的。如果Single爲你工作 - 它可能是C++代碼中的錯誤,因爲Single和Int在內存中非常不同,並且不能彼此映射 – Archeg 2012-03-21 13:42:17

回答

0

認爲它必須是簡單和無關的修復此問題... 儘管內容被指定爲「始終複製」,但C++ .dll並未在Visual Studio中得到更新。所以,它用int C#參數調用C++代碼的「float」版本。手動刷新的東西讓它工作。