在寫c#通訊程式時。傳送資料,只能傳送byte陣列,處理起來比較麻煩不說,如果是和vc6.0等寫的程式通訊的話,很多的都是傳送結構體,在vc6.0中可以很方便的把乙個char陣列轉換為乙個結構體,而在c#卻不能直接把byte陣列轉換為結構體,要在c#中傳送結構體,可以按以下方法實現:
1)定義結構體:
//命名空間
usingsystem.runtime.interopservices;
//注意這個屬性不能少 - 1位元組對齊
[structlayoutattribute(layoutkind.sequential,charset=charset.ansi,pack=1)]
struct teststruct
2)結構體轉byte陣列:
///
///結構體轉byte陣列
///
///要轉換的結構體
///轉換後的byte陣列
publicstatic byte structtobytes(object structobj)
3)byte陣列轉結構體:
///
///byte陣列轉結構體
///
///byte陣列
///結構體型別
///轉換後的結構體
publicstatic object bytestostuct(byte bytes,type type)
//分配結構體大小的記憶體空間
intptrstructptr = marshal.allochglobal(size);
//將byte陣列拷到分配好的記憶體空間
marshal.copy(bytes,0,structptr,size);
//將記憶體空間轉換為目標結構體
object obj =marshal.ptrtostructure(structptr, type);
//釋放記憶體空間
marshal.freehglobal(structptr);
//返回結構體
return obj;
}
C 指標和結構體
1.基本概念 2.指標變數的定義與使用 3.指標所佔記憶體空間 include using namespace std int main int p a cout 8.指標 陣列 函式 1.基本概念 2.結構體的定義與使用 定義 使用 3.結構體陣列 include include using na...
C語言 結構體指標強制轉換
最近寫c程式遇到的結構體指標強轉的坑,記錄一下.是乙個簡單的選單程式,程式用到鍊錶,表中儲存了9個不同命令.每次將使用者輸入的命令與表中儲存的命令名作對比 遍歷查詢 然後執行相應功能.總體結構 linktable.h 定義通用模組化鍊錶資料結構,以及相關操作 linktable.c 實現標頭檔案中定...
結構體指標,C語言結構體指標詳解
結構體指標,可細分為指向結構體變數的指標和指向結構體陣列的指標。前面我們通過 結構體變數名.成員名 的方式引用結構體變數中的成員,除了這種方法之外還可以使用指標。前面講過,student1 表示結構體變數 student1 的首位址,即 student1 第乙個項的位址。如果定義乙個指標變數 p 指...