访问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]);
但是结果是一样的。
附言:我不能在这里使用不安全的东西,因为这违反了我们的标准。
尝试将导入的函数声明为:
[DLLImport("MyDll.dll")]
private static extern int SetWatchElements(Int16[] watchElements);
并称之为没有ref
:
Int16[] someData = new Int16[80];
var result = SetWatchElements(someData);