请问各位,在DELPHI中有  联合体 类型吗?如何定义

解决方案 »

  1.   

    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;
      

  2.   

    Msg: Cardinal;这条是什么意思呢?
      

  3.   

    如果我是这样两个记录类型,有将如何写type
     Deliver = ^TDeliver;
      TDeliver = Record
       RecvType:byte;
       TpUid:byte;
       TpUdhi:byte;
      end;type
     Result = ^TResult;
      TResult = Record
       RecvType:byte;
       TpUid:byte;
       TpUdhi:byte;
      end;
      

  4.   

    type
     Deliver = ^TDeliver;
      TDeliver = Record
       RecvType:byte;
       TpUid:byte;
       TpUdhi:byte;
      end;
    使用时,声明变量即可
        configdata:array[0..50] of Deliver;
        fp:file of Deliver;
      

  5.   

    建议好好看看object pascal的书,清楚的提到,object pascal变体记录类型实际上就相当于联合类型,各域占用共同的空间,比如:
    TCompareRec = packed record
      ColIdx: Byte;
      Op: TOp;    
      case VType: TValueType of
          vtChar: (VChar: PShortString);
          vtInt: (VInt: Integer);
          vtFloat: (VFloat: Double);
    end;
    这是我的一个程序中使用的一个记录类型,其中,VChar,VInt,VFloat,就公用同一片内存,但是,如果某一个更长,则以最长的分配空间。如果用SizeOf(TCompareRec),相当于是SizeOf(ColIdx) + SizeOf(Op) + SizeOf(VType) + SizeOf(VFloat) = 1 + 1 + 1 + 8 = 11,这里,编一个小程序看看就知道了,设置VChar,VInt,VFloat中的任一个,其他的都会被影响,这说明他们确实公用一片空间