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

時間 2021-06-25 14:47:02

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語言中怎樣用c 類中的物件呼叫c 類中的方法

之間的差異的c語言和c 有很多 新的程式程式思維,c語言是程序導向的,和c 物件。2,c語言的標準庫,他們是鬆散的,但在標頭檔案中相同的功能和c 的大部分功能都整合非常緊密,特別是c語言不是在c api window系統最api的有機結合,是一個集體。但你也可能是一個單獨的api呼叫。3,特別是在c...

C 寫DLL易語言呼叫問題,C 寫DLL易語言呼叫問題

在dll.def檔案寫 exports add在dll.cpp檔案寫 int stdcall add int a,int b 在易語言中插入dll命令 版本 2 dll命令 dll命令1,整數型,dll.dll add 引數 a,整數型 引數 b,整數型 1.在程式前面加一行 pragma comm...

C如何呼叫變數名稱的類裡的函式,C 如何呼叫變數名稱的類裡的函式?

1 屬性更改 2 建構函式更改 在你的keys類中的 鍵位函式 應該呼叫公開的 屬性值,而這個屬性值應該被設有預設值。但它允許被外部更改 初學c 怎麼在一個類中呼叫另一個類的函式? 這種a窗體,b窗體互相呼叫是最差的程式設計習慣,增加了耦合度下面這個例子讓你可以解決互相呼叫的問題,a窗體中的方法,還...