C呼叫C 的dll庫怎麼傳遞結構體中不定長度的char陣列

2021-06-25 14:47:35 字數 1200 閱讀 1990

1樓:匿名使用者

[marshalas(unmanagedtype.u4)]

public uint nid;

[marshalas(unmanagedtype.u1)]

public byte nctrl;

[marshalas(unmanagedtype.byvalarray, sizeconst = 8)]

public byte pdata;

};c#函式的呼叫:包含使用指標intptr替代結構體陣列和讀取intptr的方法

hscan_msg msg1 = new hscan_msg[10];

for (int i = 0; i < msg1.length; i++)

intptr ptarray = new intptr[1];

ptarray[0] = marshal.allochglobal(marshal.sizeof(typeof(hscan_msg)) * 10);

intptr pt = marshal.allochglobal(marshal.sizeof(typeof(hscan_msg)));

marshal.copy(ptarray, 0, pt, 1);

int count = hscan_readcanmessage(0x0, 0,pt, 10);

textboxstatus.text += "\r\n" + "讀取0口:" + count.tostring() + "幀資料";

for (int j = 0; j < 10; j++)

2樓:空雪夢見

一個是byvaltstr改為byvalstr試試看,否則傳遞過去可能程式只能識別到第一個字元

以及rtdb_tagname_length的長度,呃……看樣子是個常量應該固定的吧?

然後inkinfobytes不用new初始化其實……呼叫處檢查一下inkinfobytes的長度

dll那邊有源**的話最好對著dll除錯,在函式入口點下斷點,看看傳遞進去的東西是什麼樣的,這樣比較容易判斷故障。

除錯方法就是開啟dll的工程,c#的exe複製到debug資料夾裡,在工程設定裡面除錯那邊把啟動程式設定成c#的那個exe,然後dll**裡下斷點,然後開始除錯

3樓:匿名使用者

建議使用足夠大的長度,使得字串長度固定。像這種多語言互動的,可能會有很多奇奇怪怪的問題

C中dll該如何宣告及呼叫,C 中如何呼叫DLL檔案?

dllimport twain 32.dll entrypoint 1 private static extern twrc dspxfer in,out twidentity origin,in twidentity dest,twdg dg,twdat dat,twmsg msg,in,out ...

c 結構體怎麼用,c 裡用結構體好嗎?

結構 struct 結構是由基本資料型別構成的 並用一個識別符號來命名的各種變數的組合。結構中可以使用不同的資料型別。1.結構說明和結構變數定義 在turbo c中,結構也是一種資料型別,可以使用結構變數,因此,象其它 型別的變數一樣,在使用結構變數時要先對其定義。定義結構變數的一般格式為 stru...

關於c 的。什麼呼叫方式是引用呼叫??引用呼叫的形參實參分別是什麼

不是的你說的 是不是函式的引數是引用傳入的事。其實很多時候,可能事絕大多數內的函式引數都被宣告成引用形式,容有時候可能會是個const引用。因為代價比較低。不像傳值的引數會給實參賦值一份到函式裡用。引用的形參列表,在呼叫的時候,會傳入實參的引用,就不用複製整個物件了,降低傳參的代價。引用就是另一個變...