如题???

解决方案 »

  1.   

    record 应该是可以的吧?
    C++ 我不懂,但是看 MSDN 的帮助,record 不行,应该就是 class 了。
      

  2.   

    www = record
      a:string;
      b:integer;
     case c of 
       0:.....
       1:.....
    end;
      

  3.   

    看看varient对象是如何定义的你就会明白了
      

  4.   

    当然用record
    type 
      AA=record 
       i,j:integer;
       ...
    end;
    很复杂,要经常转换类型时可以改用variant
      

  5.   

    你跑到Messages.pas,然后查找case这关键字,就有大把的union的例子
      

  6.   

    record 要加上packed关键字
    他们说的只是c里面的struct
      

  7.   

    to copy_paste(木石三)
    那么用时候怎么用呢?
    我找到了一个这样的定义:
      TMSHMouseWheel = packed record
        Msg: Cardinal;
        WheelDelta: Integer;
        case Integer of
          0: (
            XPos: Smallint;
            YPos: Smallint);
          1: (
            Pos: TSmallPoint;
            Result: Longint);
      end;
    用时候怎么用呢?case Integer of ……不大理解!
      

  8.   

    union不是以最大字节数来分配内存的吗,所以它会:
     
    msg: Sizeof(Cardinal) = 4;
    WheelDelta: SizeOf(Integer) = 4;
    Pos: TSmallPoint = SizeOf(TSmallPoint) = 4;
    Result : Sizeof(LongInt) = 4;分配4*4 = 16字节给TMSHMouseWheel的一个变量,其中:
        case Integer of
          0: (
            XPos: Smallint;   // 2字节
            YPos: Smallint);  // 2字节
          1: (
            Pos: TSmallPoint; // 4字节
            Result: Longint); // 4字节
        
    XPos, YPos和Pos其实是保存在同一个内存位置,也就是说:访问XPos, YPos,其时就是访问Pos.X, Pos.Y,与Result无关。case Integer of 只是一个形式,说明下面是分了几种情况,你也可以
    case Byte of
    case TMydataType of 
    ...再明白的话,我帮你up,看看别人怎么说。不会说c的union也不明白吧。
      

  9.   

    建议你看看System.pas中对Variant类型是如何定义的。