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 中構造器的呼叫問題

a aa 這句話表示宣告瞭一個返回值為a型別的普通函式!詳細解答如下 使用無參建構函式建立物件時,應該用語句a aa 而不是a aa 你這是宣告瞭一個名為aa 返回值為a型別的普通函式!只要人為的定義建構函式哪怕是空建構函式系統都將不再生成預設的建構函式,而且你用的是建構函式過載,如果定義a aa ...

c 中解構函式在成員函式中的呼叫問題

因為第二種方法你沒有定義拷貝建構函式,所以ab operator int a 執行完之後,返回的是return this,會在記憶體中再次構造一個ab的物件,並且把 this指向的物件按位拷貝給這個物件,建立這個物件的時候,會用到x new int 2 分配一段記憶體。由於有a 3 會再次呼叫按位拷...

C主視窗呼叫子視窗的值傳遞,在C 中怎麼樣才能把父窗體中的值傳給子窗體

文庫寶藏 1 傳引數的時候,你可以過載子視窗的建構函式,給它加上引數,比如public form string str 呼叫的時候你就可以將父視窗的值傳給它了。2 你說的應該是動態建立視窗,每個視窗都會有自己的id,不會重複的。3 你動態建立的視窗,裡面的控制元件沒有新增事件,這樣你就需要自己手動新...