struct RMSG { //用于传送消息   
  union  {
     unsigned long Head;
 struct  {
   unsigned char  MsgType;     //消息类型  
       unsigned char  BoardFlag;   //板类型标志(见FLAGXXX定义)
       unsigned char  BoardIndex;  //机箱物理号(高4位)+板位物理号(低4位)
       unsigned char  ChIndex;     //通道物理号(0--255) 
 };
  };
    
  union  {
    unsigned long Param;      //长参数
struct {
               short ShortParam;  //短参数
  unsigned short LogicCh;     //逻辑顺序号      
};
struct {
  unsigned char  Msg1Len;     //消息内容(Data1)长度(0--15)
      unsigned char  Msg2Len;     //消息内容(Data2)长度(0--15)
};
struct {   
  unsigned char  MsgLen;      //消息内容(Data)长度(0--32)
      unsigned char  SubMsgType;  //子消息类型
};

  };  union  {
    struct {
      unsigned char  Data1[16];
  unsigned char  Data2[16];
};
struct {
  unsigned short Data1w[8];
  unsigned short Data2w[8];
};
    union{
  unsigned char  Data[32];
  unsigned short Dataw[16];
};
  };
};
将上面结构转成vb,关键是union 和 unsigned怎么处理?

解决方案 »

  1.   

    union改成type 
      unsigned不管他了,vb都是有符号的
      

  2.   

    union是联合结构,在vb中可以用type声明,类似这样:struct RMSG { //用于传送消息   
      union  {
         unsigned long Head;
     struct  {
       unsigned char  MsgType;     //消息类型  
           unsigned char  BoardFlag;   //板类型标志(见FLAGXXX定义)
           unsigned char  BoardIndex;  //机箱物理号(高4位)+板位物理号(低4位)
           unsigned char  ChIndex;     //通道物理号(0--255) 
     };
      };翻译为:
    Private Type mtest
        MsgType As Byte
        BoardFlag As Byte
        BoardIndex As Byte
        ChIndex As Byte
    End TypePrivate Type RMSG
        Head As Long
        mmtest As mtest
    End Type其余的类推
      

  3.   

    struct 可以用type,但是union :公用内存。
    具体怎么实现我不清楚,所以不知道用type是否可以。
      

  4.   

    Private Type RMSG
        Head As Long
        mmtest As mtest
        '还有其它的type,你自己补上    
    End Type
      

  5.   

    union是内存区域共享的意思,也就是说
    unsigned long Head和
     struct{
       unsigned char  MsgType;     //消息类型  
       unsigned char  BoardFlag;   //板类型标志(见FLAGXXX定义)
       unsigned char  BoardIndex;  //机箱物理号(高4位)+板位物理号(低4位)
       unsigned char  ChIndex;     //通道物理号(0--255) 
     };
    共用4个字节的内存
    所以,VB里声明的Type至少应该是这样的
    type RMSG
      Head as long
      Param as long
      Data(0 to 31) as byte
    end type
    当然,为了方便起见,你也可以再定义其他子结构,然后用copymemory将Head的值复制过去便可
      

  6.   

    谢谢绿豆兄,此帖已结,另开一帖为兄加分。
    http://expert.csdn.net/Expert/topic/2899/2899971.xml?temp=.7000696