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[]来处理,不知道这样是否可以?