1 回答

TA貢獻1982條經(jīng)驗 獲得超2個贊
C#無法直接調(diào)用這種參數(shù)的函數(shù),C#中你描述的那種二維數(shù)組,本質(zhì)上跟一維數(shù)組一致。倒是single[][]跟float**是類似的,但是也不能直接傳遞。
然后具體說說
float* arr arr為指向float型的指針
single[] arr arr為single型數(shù)組的引用,當傳遞給API時,會自動傳遞內(nèi)部指針,這個指針才真真的指向single型的指針
float** arr arr為一個指向float型指針的指針,即arr[]應該是一個float型指針
single[][] arr arr為一個single型數(shù)組引用的數(shù)組引用,這意味著arr的內(nèi)部指針指向的是single[]型引用的指針,跟指向single型指針完全是兩碼事
綜上所述,C#不能直接調(diào)用Test(float** arr,int rows,int cols),你必須使用非安全代碼構造一個single*[],然后將這個數(shù)組傳遞過去。下面是一個例子
[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)這樣聲明,就要用下面的方法調(diào)用
//fixed(float** fpp=farr)
//{
// return Test(fpp, row, col);
//}
}
}
}
- 1 回答
- 0 關注
- 706 瀏覽
添加回答
舉報