求助vb6结构体在内存中占字节的说明Private Type POINT
x As Long
y As Long
End TypePrivate Type DROPFILES
pFiles As Long
pt As POINT
fNC As Long
fWide As Long
End Type
如上结构。我知道在vb6中string 是以 btsr类型存在的。那么上面结构实例化后,在内存中是怎么排列的呢,有没有4个字节的引导字节呢?
请前辈指点我,最好是以图示的形式
x As Long
y As Long
End TypePrivate Type DROPFILES
pFiles As Long
pt As POINT
fNC As Long
fWide As Long
End Type
如上结构。我知道在vb6中string 是以 btsr类型存在的。那么上面结构实例化后,在内存中是怎么排列的呢,有没有4个字节的引导字节呢?
请前辈指点我,最好是以图示的形式
http://www.vckbase.com/document/viewdoc/?id=444
用什么图啊,代码最能说明问题:
Option ExplicitPrivate Type POINT
x As Long
y As Long
End TypePrivate Type DROPFILES
pFiles As Long
pt As POINT
fNC As Long
fWide As Long
End TypePrivate Sub Form_Click()
Dim stcTest As DROPFILES Cls
Print Hex$(VarPtr(stcTest))
Print Hex$(VarPtr(stcTest.pFiles))
Print Hex$(VarPtr(stcTest.pt))
Print Hex$(VarPtr(stcTest.pt.x))
Print Hex$(VarPtr(stcTest.pt.y))
Print Hex$(VarPtr(stcTest.fNC))
Print Hex$(VarPtr(stcTest.fWide))
End Sub
pFiles As Long
pt As POINT
fNC As Long
fWide As Long
End Type你自己试一下就知道了:
sub comand1_clikc
dim x as DROPFILESdebug.print varptr(x.pFiles),Varptr(x.pt),varptr(x.fnc),Varptr(fWidth)
end sub
#ifndef __CCU_485MSG_H__#define __CCU_485MSG_H__.. "CCU_typedef.h"
#define MAX_QUEUE_MSG_LEN (256) /* 队列消息最大长度, 不能随意修改 */
#define BROADCAST_TIMES (400) /* 发送广播次数 */
typedef enum {y1_25MS = (1), /* 25ms定时器值 */
y1_50MS = (1 * 2), /* 50ms定时器值 */
y1_100MS = (2 * 2), y1_200MS = (4 * 2), y1_500MS = (10 * 2),
y1_1S = (20 * 2), y1_2S = (40 * 2), y1_3S = (60 * 2),
y1_5S = (100 * 2), y1_10S = (200 * 2), y1_15S = (300 * 2),
y1_30S = (600 * 2), y1_1M = (1200 * 2), y1_3M = (3000 * 2),
y1_4M = (4000 * 2), y1_5M = (5000 * 2), y1_10M = (10000 * 2),
y1_15M = (15000 * 2), y1_1H = (71999 * 2) }y1_ENUM;
/* 消息类型定义 */typedef enum {
CCU_485_MSG_TYPE, CCU_TIMER_MSG_TYPE,
CCU_API_MSG_TYPE, CCU_485INTERNAL_TYPE, /*3 485内部命令 */
CCU_LOOP_MSG_TYPE, /*4 485串口环回消息 */ CCU_DT_MSG_TYPE /*5 透传消息类型 */
}CCU_MSG_TYPE;
/* 命令字定义 */
typedef enum {CCU_CARD_REG_CMD, /* 子卡注册命令 */
CCU_BOTTOM_CMD = 0xFF /* 底板命令 */
}CCU_CMD_TYPE;
/* 定时器类消息类型枚举 */
typedef enum {
TIMER_CMD_ADDR_QUERY, /* 地址轮询消息 */
TIMER_CMD_ADDR_AUTO_ALLOT, /* 地址自动分配消息 */
TIMER_CMD_LINK_KEEP, /* 485链路维护消息 */
TIMER_CMD_BROADCAST, /* 广播消息 */
TIMER_CMD_TYPE_UNKONWN /* 非法消息 */
}CCU_TIMER_MSG_ENUM;
/* 各类型消息定时触发控制基数, 可控 */
typedef struct{
UINT32 ulAddrQueryMsgRad; /* 地址轮询基数 */
UINT32 ulAddrAutoAllotMsgRad; /* 地址自动分配基数 */
UINT32 ulLinkKeepMsgRad; /* 链路维护基数 */
UINT32 ulDtMsgCntsMsgRad; /* 透传消息基数 */
}CCU_MSG_RAD, *PCCU_MSG_RAD;
/* 通用消息队列消息结构 */
typedef struct tag_MSG_BUF{ long int mType; /* 消息类型 */
char mText[MAX_QUEUE_MSG_LEN]; }CCU_QUEUE_MSG, *PCCU_QUEUE_MSG;
/* 消息帧结构 */
typedef struct tag_CCU_MSGFRAME{ UINT32 ulMsgPid; /* PID */
UINT32 ulResId; /* 资源ID用来查找不同节点 */
UINT16 uwSeq; /* 上层传下来的序列号 */UINT8 ucDir; /* 消息方向 */
UINT8 ucHostType; /* 主机类型 */ UCHAR ucNetFn; /* 命令大类api类和timer类 */
UCHAR ucCmd; /* 各类的命令字 */
UINT16 uwLen; /* 数据域长度 */
UCHAR aucData[MAX_485_DATA_LEN]; /* 数据域 */
}CCU_MSG_FRAME, *PCCU_MSG_FRAME;
/* 时间间隔基数 */extern CCU_MSG_RAD g_stMsgRad;
/* API消息结构体 */extern CCU_QUEUE_MSG g_stApiSendMsg[MAX_CCU_CHAN_NUM];
/* 透传消息结构 */extern CCU_QUEUE_MSG g_stDtRecvMsg[MAX_CCU_CHAN_NUM];
/* 透传消息结构 */extern CCU_QUEUE_MSG g_stDTSendMsg[MAX_CCU_CHAN_NUM];
extern VOID SendManger100msMsg(VOID);
extern VOID SendManger500msMsg(VOID);
extern VOID SendManger1sMsg(VOID);
extern VOID SendManger5sMsg(VOID);
extern VOID SendManger1hMsg(VOID);
extern VOID InitMsgTimeRad(VOID);
extern VOID Proc485Msg(PCCU_MSG_FRAME pMsg);
extern VOID ProcTimerMsg(PCCU_MSG_FRAME pMsg);
extern VOID SendTimerMsg(UINT32 ulMsgType);
extern VOID SetAddrAllotMsgRad(y1_ENUM enTimer);
extern VOID SetAddrQueryMsgRad(y1_ENUM enTimer);
extern VOID SetLinkKeepMsgRad(y1_ENUM enTimer);
extern VOID TimerMsgGenerator(UINT32 ulTimerCount);#endif
x As Long
y As Long
End TypePrivate Type DROPFILES
pFiles As Long
pt As POINT
fNC As Long
fWide As Long
End TypePrivate Sub Command1_Click()
Dim stcTest As DROPFILES
Debug.Print LenB(stcTest) '结果是20个字节
End Sub