c呼叫C 寫的DLL,DLL中的介面引數有二維陣列(如

2021-06-25 14:47:34 字數 1386 閱讀 7458

1樓:匿名使用者

這個問題 我可以非常明確地告訴你,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)

return test(farr, row, col);

//如果test(float** arr, int row, int col)這樣宣告,就要用下面的方法呼叫

//fixed(float** fpp=farr)//}}}

2樓:

single[,]加上out關鍵字 或者ref關鍵字

c#呼叫c++dll介面時,c++介面需要的引數是結構體陣列指標,那我c#如何編寫

3樓:匿名使用者

system.runtime.interopservices;

// 定義結構體

struct bristeps

// 這裡得換成具體的dll的名字

[dllimport("***.dll")]static extern bool getbrival(out byte nval);

[dllimport("***.dll")]static extern bool setbrival(byte nval);

[dllimport("***.dll")]static extern bool getbristeps(out bristeps tsteps);

4樓:

使用intptr 代替結構體指標

5樓:

c#裡面用string接收就可以的

c中呼叫cmd來執行命令,c 呼叫執行cmd命令

很容易 使用下面語句就行了。system.diagnostics.process.start d test test.exe 語句翻譯如下 啟動d盤test目錄下的檔案 test.exe 首先引用 using system.diagnostics process.start cmd.exe 或pro...

c語言如何實現函式的呼叫,C語言如何呼叫函式

函式名加 實參 這樣吧.舉個例子你看一下.int add int x,int y 定義一個z x y的函式 int main 主函式 理解了沒.還沒的話.仔細看下教材.這個問題很容易解決的.如何呼叫c語言寫的庫,如a.lib等,有對應的庫標頭檔案a.h。假設a.h中定義了函式 int whycodi...

C語言中函式呼叫問題,C語言中函式的呼叫

首先我們來說一下,你這個程式是有很大的問題的。函式有且只有唯一一個返回值,當程式執行到return的時候,這個函式就結束並返回了。所以,你這裡寫2個return來返回最大值和最小值是不可能的。再者,如果你想使用返回值作為最大值,最小值的傳遞,那麼在main函式中,你呼叫star函式的時候需要一個變數...