日期:2014-05-17  浏览次数:21130 次

C语言中的联合中存在结构体,如何转化成C#中的结构体!请高人指点不胜感激
union{
  NET_DVR_DEC_STREAM_DEV    struDecStreamDev;
  NET_DVR_PU_STREAM_URL     struUrlInfo;
  BYTE                      byRes[300];
}

这个是C的联合转化成C#结构体 为
  [StructLayoutAttribute(LayoutKind.Explicit)]
        public struct NET_DVR_DEC_STREAM_MODE//取流模式配置联合体。
        {
           [FieldOffset(0)]
            public NET_DVR_DEC_STREAM_DEV struDecStreamDev;
           [FieldOffset(0)]
            public NET_DVR_PU_STREAM_URL struUrlInfo;
            [FieldOffset(0)]
            [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 300 , ArraySubType = UnmanagedType.I1)]
            public byte[] byRes;
        }

运行代码过后报错为:
未能从程序集“tc, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null”中加载类型“NET_DVR_DEC_STREAM_MODE”,因为它在 0 偏移位置处包含一个对象字段,该字段已由一个非对象字段不正确地对齐或重叠。

我这个结构体要作为另一个结构体的字段的。请大神帮忙看看这个联合要怎么转才对。
c# 联合 结构体

------解决方案--------------------
先说下你出错的原因

在C#中使用struct来模拟联合,有个限制是不能同时使用值类型和引用类型
可惜你都用了

所以我的意思是,在C#中就不要管联合了,直接都认为是二进制byte[]

所有有联合的类型都用byte[]来处理,不知道这样是否可以?