标题:新手请教一下C#下的结构体嵌套的问题
只看楼主
arding
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-6-8
结帖率:100%
已结贴  问题点数:20 回复次数:4 
新手请教一下C#下的结构体嵌套的问题
需要通过串口通信,对方是C++写的程序,通信结构体为
 
  [StructLayout(LayoutKind.Sequential)]
    public struct BT_BLADE_INFO
    {
        public byte state;              
      public byte reserved;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
        public byte[] cpu_tmp;         
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
        public byte[] bld_ip;   
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
        public byte[] bld_netmask;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
        public byte[] bld_gateway;

    }

 [StructLayout(LayoutKind.Sequential)]
    public struct BT_PACKAGE_DWON
    {
        public byte head;
        public byte package_type;
        public short verify_value;      
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
        public BT_BLADE_INFO[] blade_info;
    }

   现在需要把这个结构体转换为byte流进行通信,程序如下:
    BT_PACKAGE_DWON down_package = new BT_PACKAGE_DWON();
    int aaa = Marshal.SizeOf(down_package);

    现在总是报错
    A first chance exception of type 'System.NotSupportedException' occurred in mscorlib.dll
An unhandled exception of type 'System.NotSupportedException' occurred in mscorlib.dll

    用Marshal.StructureToPtr也是一样的错误,我的程序是在wince5.0下执行,哪位知道这是为什么?或者说这个嵌套结构体该如何实现?

    谢谢!
搜索更多相关主题的帖子: 嵌套 结构体 
2010-06-08 17:05
athenalux
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河北石家庄
等 级:小飞侠
威 望:8
帖 子:975
专家分:2514
注 册:2008-11-26
得分:14 
两个结构的C++里是如何定义的?

QQ:81704464
2010-06-08 18:41
arding
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-6-8
得分:0 
在C++里面是这样的

typedef struct
{
    char state;        // 0: off line; 1: power off; 2: power on; 7: communication lost
    char reserved;
    char cpu_tmp[2];  // temperature: cpu1 & cpu2
    char bld_ip[4];    // ip info: ip[3]. Ip[2]. ip[1]. ip[0]
    char bld_netmask[4];
    char bld_gateway[4];
}BT_BLADE_INFO;

struct bt_package_up
{
char head;
char package_type;
short verify_value;
BT_BLADE_INFO blade_info[10];
}
谢谢版主关注

能解决这种嵌套的结构吗?
2010-06-08 20:04
athenalux
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河北石家庄
等 级:小飞侠
威 望:8
帖 子:975
专家分:2514
注 册:2008-11-26
得分:0 
不知道行不行,呵呵。
[StructLayout(LayoutKind.Explicit]
public struct BT_BLADE_INFO
{
[FieldOffset(0)] public byte state;
[FieldOffset(1)] public byte reserved;
[FieldOffset(2)] public byte[] cpu_tmp;
[FieldOffset(4)] public byte[] bld_ip;
[FieldOffset(8)] public byte[] bld_netmask;
[FieldOffset(12)] public byte[] bld_gateway;
}

[StructLayout(LayoutKind.Explicit]
public struct bt_package_up
{
[FieldOffset(0)] public byte head;
[FieldOffset(1)] public byte package_type;
[FieldOffset(2)] public short verify_value;
[FieldOffset(4)] public BT_BLADE_INFO[] blade_info;
}

QQ:81704464
2010-06-09 14:19
arding
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-6-8
得分:0 
谢谢版主
我还是放弃了,用C++做了一个dll来处理。

再次感谢
2010-06-10 14:41



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-309629-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.117694 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved