第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

怎么樣向C++編寫的DLL中傳遞參數(shù)

怎么樣向C++編寫的DLL中傳遞參數(shù)

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

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

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

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號