1 回答
TA貢獻1982條經驗 獲得超2個贊
C#無法直接調用這種參數的函數,C#中你描述的那種二維數組,本質上跟一維數組一致。倒是single[][]跟float**是類似的,但是也不能直接傳遞。
然后具體說說
float* arr arr為指向float型的指針
single[] arr arr為single型數組的引用,當傳遞給API時,會自動傳遞內部指針,這個指針才真真的指向single型的指針
float** arr arr為一個指向float型指針的指針,即arr[]應該是一個float型指針
single[][] arr arr為一個single型數組引用的數組引用,這意味著arr的內部指針指向的是single[]型引用的指針,跟指向single型指針完全是兩碼事
綜上所述,C#不能直接調用Test(float** arr,int rows,int cols),你必須使用非安全代碼構造一個single*[],然后將這個數組傳遞過去。下面是一個例子
[DllImport("test.dll")]
static extern unsafe bool Test(float*[] arr, int row, int col);//這里arr要聲明為float*[],使用起來比較方便
bool CallTest(float[,] arr)
{
int row = arr.GetUpperBound(0) + 1;
int col = arr.GetUpperBound(1) + 1;
unsafe
{
fixed(float* fp=arr)
{
float*[] farr=new float*[row];
for (int i = 0; i < row;i++ )
{
farr[i] = fp + i * col;
}
return Test(farr, row, col);
//如果Test(float** arr, int row, int col)這樣聲明,就要用下面的方法調用
//fixed(float** fpp=farr)
//{
// return Test(fpp, row, col);
//}
}
}
}
- 1 回答
- 0 關注
- 712 瀏覽
添加回答
舉報
