C++中的union結構體怎么轉換成C#?
2 回答
白豬掌柜的
TA貢獻1893條經驗 獲得超10個贊
1 2 3 4 5 6 7 8 9 10 11 12 | [StructLayout(LayoutKind.Explicit, Size=2)] struct TokenValue { [FieldOffset(0)] [MarshalAs(UnmanagedType.U1)] public byte _cval; [FieldOffset(1)] [MarshalAs(UnmanagedType.U1)] public byte _ival; [FieldOffset(0)] public ushort flags; } |
慕桂英4014372
TA貢獻1871條經驗 獲得超13個贊
public struct dash_generic_param
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 30)]
public short[] raw_data;
}
//public struct dash_generic_param
//{
// [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
// public ushort[] values;
// [MarshalAs(UnmanagedType.ByValArray, SizeConst = 11)]
// public ushort[] reserved;
// [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
// public ushort[] limit;
//}
// 結構體按你需求,2選1
public struct DashParamPacket {
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 34)]
public ushort[] raw_data;
}
//public struct DashParamPacket {
// public ushort pre_id;
// public byte token;
// public byte r1;
// public dash_generic_param data;
// public byte major_id;
// public byte minor_id;
// public ushort r2;
//}
// 例如c++庫里接口名為GetPacket,DashParamPacket是c#定義的與C++中內存對齊的結構體
[DllImport("xxx.dll")]
public static extern bool GetPacket(ref DashParamPacket parm);
static void Main(string[] args)
{
DashParamPacket param = new DashParamPacket(); // C#里的結構體
GetPacket(ref param); // 如果C++接口定義的結構體指針,可以直接用引用
// 如果需要轉void*使用,可以用marhal庫來回轉
IntPtr p = In- 2 回答
- 0 關注
- 807 瀏覽
添加回答
舉報
0/150
提交
取消
