繁体   English   中英

将二维双数组从 C# 传递到 C++ 函数

[英]Passing 2D double array from C# to C++ function

我在 C++ 的托管类中有一个函数。 让我们将此函数称为 CopyDoubles。 这个函数只接收两个数组作为参数。

double ManagedClass::CopyDoubles(double acopy[][3], double bcopy[][3]){
    //code
}

从 C# 中,我可以访问此函数,但是,我无法正确地将参数传递给它。 我试过这个。

double [,] a = new double[128,3];
double [,] b = new double[128,3];

double result = Managed.CopyDoubles(a,b);

但它不起作用。 我错过了什么? 该函数不会将 a 和 b 作为参数。

用于 C++ 函数的类名Managed让我感到困惑。 也许你的意思是 C++/CLI?

您应该为数组分配普通句柄。 然后,您可以获得指向您可以传递给 C++ 方法的数组的稳定指针。 固定一个对象可以防止垃圾收集器在内存中移动它。

GCHandle pinnedA = GCHandle.Alloc(a, GCHandleType.Pinned);
GCHandle pinnedB = GCHandle.Alloc(b, GCHandleType.Pinned);
IntPtr pointerA = pinnedA.AddrOfPinnedObject();  
IntPtr pointerB = pinnedA.AddrOfPinnedObject();

double result = Managed.CopyDoubles(pointerA, pointerB);

pinnedA.Free();
pinnedB.Free();

如果允许在项目中使用不安全代码,则可以使用固定上下文:

unsafe
{
    fixed (double* pA = a) fixed (double* pB = b)
    {
         double result = Managed.CopyDoubles(pA, pB);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM