我有這樣的C++ DLL用下面的函數:訪問指針的參數值從C++ DLL
extern "C" INT16 WINAPI SetWatchElements(INT16 *WatchElements)
{
INT16 Counter;
//some code
for (Counter = 0; Counter < WATCHSIZE; Counter++)
WatchElements[Counter] = MAPINT(WatchData[Counter]);
//some code
return ReturnValue;
}
本質上,它只是一些值賦給指針/數組,它是在通過
。當我嘗試通過C#調用這個函數時,我的問題就出現了。這是在C#中的函數定義:
[DLLImport("MyDll.dll")]
private static extern int SetWatchElements(ref Int16 watchElements);
和我是怎麼叫它:
Int16 someData = 0;
var result = SetWatchElements(ref someData);
編譯沒有和我的變量someData
實際上在它的值是正確的。問題在於,因爲在C++世界中,這些值超出了單個值的範圍,所以我不確定如何在C#中訪問這些值。
我試着做這樣的事情:
Int16[] someData = new Int16[80];
var result = SetWatchElements(ref someData[0]);
,但結果是一樣的。 PS:我不能在這裏使用不安全的產品,因爲它違揹我們的標準。
'SetWatchElements(REF someData [0]);'應該已經確定,只要制定出你沒有跨越過程邊界......你有證據證明它失敗了嗎? –
我在控制檯窗口中顯示了所有的值,someData [0]中有一個值,但所有其他索引都是0 – Josh