C++中的union結(jié)構(gòu)體怎么轉(zhuǎn)換成C#?
2 回答

白豬掌柜的
TA貢獻(xiàn)1893條經(jīng)驗 獲得超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貢獻(xiàn)1871條經(jīng)驗 獲得超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; //} // 結(jié)構(gòu)體按你需求,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++中內(nèi)存對齊的結(jié)構(gòu)體 [DllImport("xxx.dll")] public static extern bool GetPacket(ref DashParamPacket parm); static void Main(string[] args) { DashParamPacket param = new DashParamPacket(); // C#里的結(jié)構(gòu)體 GetPacket(ref param); // 如果C++接口定義的結(jié)構(gòu)體指針,可以直接用引用 // 如果需要轉(zhuǎn)void*使用,可以用marhal庫來回轉(zhuǎn) IntPtr p = In
- 2 回答
- 0 關(guān)注
- 800 瀏覽
添加回答
舉報
0/150
提交
取消