访问C#中C++DLL中的指针参数值

本文关键字:参数 指针 C++DLL 访问 | 更新日期: 2023-09-27 18:26:52

我有一个带有以下函数的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]);

但是结果是一样的。

附言:我不能在这里使用不安全的东西,因为这违反了我们的标准。

访问C#中C++DLL中的指针参数值

尝试将导入的函数声明为:

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

并称之为没有ref:

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