我有一个 C++ 库,其标题如下所示:
void NotMyFun(double * a, int * b);
该函数从 读取a
并写入b
。为了调用该库,我创建了一个 C++/CLI 包装器,其中定义了以下函数:
static void MyWrapperFun(double * a, int * b)
{
NotMyFun(a,b);
}
并且工作正常。例如,从 C# 代码中,我有两个托管数组,即double[] ma
和double[] mb
,其中ma
已经保存了一些有意义的数据,并且mb
在调用包装器时被 - 有意义地 - 填充。下面是调用包装函数的好方法吗?
unsafe
{
fixed (double* pma = ma)
{
fixed (int* pmb = mb)
{
MyWrapperNS.MyWrapperClass.MyWrapperFun(pma,pmb);
}
}
}
不安全的指针是一种快速的方法吗?在向/从 C++/CLI 包装器传递和检索时,是否涉及任何数据复制?或者指针已经指向 C# 数组中的连续内存空间?
此外,我需要在这里手动清理内存吗?如果指针与托管 C# 数组的内存相关联,我猜想它们之后会被正确地垃圾收集,但只是想确定一下。