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
这样的定义的目的是什么?
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
这样的定义的目的是什么?
两个Word的长度就是一个Longint的长度。
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;
//
高人,应用真是精妙!!!!
你可以用00000000表示不看电影
00000001表示《无间道III》
00000010表示《黑客帝国III》
00000011表示《手机》
……
想看1就买1的光碟去~~
type
TMessage = record
Msg : Cardinal;
WParam : longint;
LParam : longint;
Result : longint;
end;但需要取得WParam前四个字节的数值就需要使用LoWord(TMessage.WParam)这样的方法~~
这样使用就简化TMessage.WParamLo了~~还有就是不要管他什么目的,Windows是M$开发的,不是你我~~
所以你就按这个标准走吧~~
不高兴也没办法,除非你自己开发一套系统先~~