将二维双数组从 C# 传递到 C++ 函数
Posted
技术标签:
【中文标题】将二维双数组从 C# 传递到 C++ 函数【英文标题】:Passing 2D double array from C# to C++ function 【发布时间】:2018-07-28 14:32:46 【问题描述】:我在 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 作为参数。
【问题讨论】:
【参考方案1】:用于 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);
【讨论】:
以上是关于将二维双数组从 C# 传递到 C++ 函数的主要内容,如果未能解决你的问题,请参考以下文章