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