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函式的時候需要一個變數...