我在c ++的Managed类中有一个函数。我们称这个函数为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作为参数。
答案 0 :(得分:0)
用于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);
}
}