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