亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

怎么樣向C++編寫的DLL中傳遞參數

怎么樣向C++編寫的DLL中傳遞參數

C++
慕田峪4524236 2018-10-02 01:00:25
怎么樣向C++編寫的DLL中傳遞參數
查看完整描述

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);
//}
}
}
}

查看完整回答
反對 回復 2018-11-06
  • 1 回答
  • 0 關注
  • 712 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號