在packet record中使用case的具体用法和含义(50分)

  • 主题发起人 主题发起人 zhrrqy
  • 开始时间 开始时间
Z

zhrrqy

Unregistered / Unconfirmed
GUEST, unregistred user!
在packet record中使用case的具体用法和含义
如:
LongRec = packed record
case Integer of
0: (Lo, Hi: Word);
1: (Words: array [0..1] of Word);
2: (Bytes: array [0..3] of Byte);
end;
 
就是公用体,公用的意思就是0,1,2中的所有参数共用一段内存
建议结合C++的Union学习,也可以参考以前的老帖子
以下为摘录的一段:
plane822 (2003-04-11 13:08:00)
TMessage = packed record
Msg: Cardinal;
case Integer of
0: (
WParam: Longint;
LParam: Longint;
Result: Longint);
1: (
WParamLo: Word;
WParamHi: Word;
LParamLo: Word;
LParamHi: Word;
ResultLo: Word;
ResultHi: Word);
end;

请给解释一下各个参数的用法,特别是CASE INTEGER 那一句根本就一点都不理解,劳驾

NeutronDelphi (2003-04-15 8:59:00)
结构体你应该知道吧,共用体是一个特殊的结构体,形式上由多个结构体组成,
我说详细一点吧,
比如说你定义一个变量Msg:TMessage;
假定系统分配的内存为 1234
:@Msg=1234(@符号为取地址)
但Msg占用96个字节也就是说Msg位于1234-1330(即1234+96);
那么Msg的第一个变量为整个变量的首地址即Msg.WParam 或Msg.WParamLo的地址为
1234,但他们的长度不同,Msg.LParam为1234-1266, Msg.WParamHi 为1234-1250,
同样的道理 Msg.WParam为1267-1299,Msg.WParamLo为1250-1266
也就是说Hi(Msg.WParam)=Msg.WParamHi;

总而言之,case Integer of 是定义共用体,
共用体就是几个结构体共同占用同一段内存,既然是同一段内存,那么结构体的内容是一样的,
只是访问的方式不同而已.比如十六进制 $5328 访问高8位得到$53,访问低8位得到$28.
你要是还不懂就看看C,Pascal语言的共用体的书吧 .
 
后退
顶部