簡體   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