定义固定大小的结构体
[StructLayout(LayoutKind.Sequential,Size=14,CharSet= CharSet.Ansi,Pack=1)]
struct SerialPackage
{
public UInt32 voltage;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
public byte[] datas;
}
前面[]指定了结构体的布局方式和大小,中间部分的[]指定了数组的封送方法和长度
在结构体和数组直接复制数据使用System.Runtime.InteropServices.Marshal.Copy()方法和Marshal.PtrToStructure()方法,中间必须经过一个中转
byte[] datas=new byte[m_iPackSize];
IntPtr structPtr = Marshal.AllocHGlobal(m_iPackSize);
Marshal.Copy(datas,0,structPtr,m_iPackSize);
m_sPackage=(SerialPackage)Marshal.PtrToStructure(structPtr,typeof(SerialPackage));
Marshal.FreeHGlobal(structPtr);
public struct Book
{
public int[] i;
//或者在构造函数里初始化数组,结构体支持构造函数
}
BooK book1;
book1.i =new int[10];
book1.i[0]=10;
struct structName
{
Array[] arr;
}
typedef struct
{
uint32_t array_name[];
} struct_name;