簡體   English   中英

從C#中的C ++ DLL訪問指針參數值

[英]Accessing pointer parameter values from a C++ DLL in C#

我有以下功能的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:我不能在這里使用不安全的東西,因為這違反了我們的標准。

嘗試將導入的函數聲明為:

[DLLImport("MyDll.dll")]
private static extern int SetWatchElements(Int16[] watchElements);

並在沒有ref情況下調用它:

Int16[] someData = new Int16[80];
var result = SetWatchElements(someData);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM