[英]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.