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怎么处理?
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怎么处理?
unsigned不管他了,vb都是有符号的
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其余的类推
具体怎么实现我不清楚,所以不知道用type是否可以。
Head As Long
mmtest As mtest
'还有其它的type,你自己补上
End Type
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的值复制过去便可
http://expert.csdn.net/Expert/topic/2899/2899971.xml?temp=.7000696