c# union结构体_C++中的union结构体怎么转换成C#?

慕桂英4014372

        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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值