http://expert.csdn.net/Expert/topic/1849/1849551.xml?temp=.0761072

解决方案 »

  1.   

    struct Deliver
    {
      byte  RecvType;
      [MarshalAs (UnmanagedType.ByValArray,SizeCount=22)]
      byte  SrcNo[22];
      byte  TpUid;
      byte  TpUdhi;
      byte  Encoded;
      int  MsgLength;
      [MarshalAs (UnmanagedType.ByValArray,SizeCount=3)]
      byte[]  Msg;
    };
      

  2.   

    public byte  RecvType;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 22)]
    public  string SrcNo;
    public byte  TpUid;
    public byte  TpUdhi;
    public byte  Encoded;
    public byte MsgLength;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 162)]
    public string Msg;
    ------------
    还剩一个Msg没取到值,哪位大侠助一力啊!
      

  3.   

    顶一下:
    我看到有这样定义的
    [StructLayout(LayoutKind.Explicit]  
    public struct Rect {  
    [FieldOffset(0)] public int left;  
    [FieldOffset(4)] public int top;  
    [FieldOffset(8)] public int right;  
    [FieldOffset(12)] public int bottom;  
    }  
    不知道换在我这个地方应该怎么用?
      

  4.   

    Try this:
    [StructLayout(LayoutKind.Sequential)]
    struct Deliver
    {
      byte  RecvType;
      [MarshalAs(UnmanagedType.LPArray,SizeConst=22)]
      byte  SrcNo[22];
      byte  TpUid;
      byte  TpUdhi;
      byte  Encoded;
      UInt16  MsgLength;
      [MarshalAs(UnmanagedType.LPArray,SizeConst=162)]
      byte  Msg[162];
    };
      

  5.   

    E:\程序代码\Mo解析\Mo解析\Form1.cs(37): 语法错误,错误的数组声明符。若要声明托管数组,秩说明符应位于变量标识符之前(byte  SrcNo[22];
    )
    你这是C#么?
      

  6.   

    Sorry
    [StructLayout(LayoutKind.Sequential)]
    struct Deliver
    {
      byte  RecvType;
      [MarshalAs(UnmanagedType.LPArray,SizeConst=22)]
      byte[]  SrcNo;
      byte  TpUid;
      byte  TpUdhi;
      byte  Encoded;
      UInt16  MsgLength;
      [MarshalAs(UnmanagedType.LPArray,SizeConst=162)]
      byte[]  Msg;
    };
      

  7.   

    不行啊,用byte[] Msg或者char[]程序都会报内存不足?!
      

  8.   

    试试这个:
    [StructLayout(LayoutKind.Sequential)]
    struct Deliver
    {
      public byte  RecvType;
      [MarshalAs (UnmanagedType.ByValArray,SizeCount=22)]public byte[]  SrcNo;
      public byte  TpUid;
      public byte  TpUdhi;
      public byte  Encoded;
      public ushort  MsgLength;
      [MarshalAs (UnmanagedType.ByValArray,SizeCount=162)]public byte[]  Msg;
    };
      

  9.   

    或者试试这个:
    [StructLayout(LayoutKind.Sequential,CharSet=CharSet.Ansi)]
    struct Deliver
    {
      public byte  RecvType;
      [MarshalAs (UnmanagedType.ByValArray,SizeCount=22)]public byte[]  SrcNo;
      public byte  TpUid;
      public byte  TpUdhi;
      public byte  Encoded;
      public ushort  MsgLength;
      [MarshalAs (UnmanagedType.ByValTStr,SizeCount=162)]public string  Msg;
    };