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