繁体   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