gpt4 book ai didi

c# - 在 C# 中从 C++ DLL 访问指针参数值

转载 作者:行者123 更新时间:2023-11-28 02:14:55 24 4
gpt4 key购买 nike

我有一个具有以下功能的 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:我不能在这里使用 unsafe,因为它违反了我们的标准。

最佳答案

尝试将导入函数声明为:

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

并且在没有ref的情况下调用它:

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

关于c# - 在 C# 中从 C++ DLL 访问指针参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34299449/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com