这样的定义的目的是什么?

chaty 2003-12-30 10:21:44
type
TMessage = 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

请问上面的类型定义,什么时候分配3个longint,什么时候分配6个word
这样的定义的目的是什么?
...全文
43 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiume 2003-12-30
  • 打赏
  • 举报
回复
to: zswangII(伴水清清)(职业清洁工)
//
高人,应用真是精妙!!!!
sonic_boy 2003-12-30
  • 打赏
  • 举报
回复
差不多,要看实际应用了。
zswangII 2003-12-30
  • 打赏
  • 举报
回复
如果理解类型强制转换,就容易理解联合类型~~
var
C: Char;
begin
C := 'a';
Byte(C) = 97;
//在内存里'a'和97有什么区别?它们都是(01100001)~~
//只要存储空间允许,当成什么类型来处理都可以~~
//就是说计算机提供给你一个字节,你想用它来保存《无间道III》也是可以的~~
//保存什么是你的事~~
end;

type
TByteChar = record
case Boolean of
False: (rByte: Byte);
True: (rChar: Char);
end;
var
vByteChar: TByteChar; //这个类型使用1Byte的存储空间
begin
vByteChar.rChar := 'a';
//此时vByteChar.rByte=97//rChar和rByte用了同一存储空间~~
end;
xiaoxiao197821 2003-12-30
  • 打赏
  • 举报
回复
同上
CloneCenter 2003-12-30
  • 打赏
  • 举报
回复
什么时候都是一样的。
两个Word的长度就是一个Longint的长度。
heimao1268 2003-12-30
  • 打赏
  • 举报
回复
高!高!高!
zswangII 2003-12-30
  • 打赏
  • 举报
回复
目前就是为了方便~~

如果这样定义~~
type
TMessage = record
Msg : Cardinal;
WParam : longint;
LParam : longint;
Result : longint;
end;

但需要取得WParam前四个字节的数值就需要使用LoWord(TMessage.WParam)这样的方法~~
这样使用就简化TMessage.WParamLo了~~

还有就是不要管他什么目的,Windows是M$开发的,不是你我~~
所以你就按这个标准走吧~~
不高兴也没办法,除非你自己开发一套系统先~~

zswangII 2003-12-30
  • 打赏
  • 举报
回复
chaty:
你可以用00000000表示不看电影
00000001表示《无间道III》
00000010表示《黑客帝国III》
00000011表示《手机》
……
想看1就买1的光碟去~~

chaty 2003-12-30
  • 打赏
  • 举报
回复
定义成这样的类型总有一定的目的吧,要不干脆用longint就成了

BTW://就是说计算机提供给你一个字节,你想用它来保存《无间道III》也是可以的~~

怎么做到?^_^

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧