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#联合结构体
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#联合结构体
解决方案 »
- 如何实现winform像浏览器一样的多标签程序
- ExecuteScalar()使用
- BindingSource 不能是自己的数据源。请不要将 DataSource 和 DataMember 属性设置为循环引用 BindingSource 的值。
- 插入数据到Access,提示“至少一个参数没有被指定值”
- C#怎么不停的打开关闭数据里网址但是不在页面上面显示呢?
- winform中 能不能直接访问网站 中的内容?
- 用C#怎么测试网页是不是能正常访问?
- 求简单介绍基于服务的数据库
- C# 验证是否为数字
- 可以让LABEL的颜色透明吗?怎么设置?
- 菜鸟关于try catch 异常的一点疑问
- 发个题目大家娱乐一下
[MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 300 )]
public byte[] byRes;个人认为主要要考虑字节对齐,而不要考虑形式上的统一
可惜你都用了所以我的意思是,在C#中就不要管联合了,直接都认为是二进制byte[]所有有联合的类型都用byte[]来处理,不知道这样是否可以?