在delphi7中,TVarData是如下定义的:  TVarData = packed record
    case Integer of
      0: (VType: TVarType;
          case Integer of
            0: (Reserved1: Word;
                case Integer of
                  0: (Reserved2, Reserved3: Word;
                      case Integer of
                        varSmallInt: (VSmallInt: SmallInt);
                        varInteger:  (VInteger: Integer);
                        varSingle:   (VSingle: Single);
                        varDouble:   (VDouble: Double);
                        varCurrency: (VCurrency: Currency);
                        varDate:     (VDate: TDateTime);
                        varOleStr:   (VOleStr: PWideChar);
                        varDispatch: (VDispatch: Pointer);
                        varError:    (VError: HRESULT);
                        varBoolean:  (VBoolean: WordBool);
                        varUnknown:  (VUnknown: Pointer);
                        varShortInt: (VShortInt: ShortInt);
                        varByte:     (VByte: Byte);
                        varWord:     (VWord: Word);
                        varLongWord: (VLongWord: LongWord);
                        varInt64:    (VInt64: Int64);
                        varString:   (VString: Pointer);
                        varAny:      (VAny: Pointer);
                        varArray:    (VArray: PVarArray);
                        varByRef:    (VPointer: Pointer);
                     );
                  1: (VLongs: array[0..2] of LongInt);
               );
            2: (VWords: array [0..6] of Word);
            3: (VBytes: array [0..13] of Byte);
          );
      1: (RawData: array [0..3] of LongInt);
  end;
在使用时:
var
 v:variant;
begin
  TVarData(v).VType:=varInteger;
  TVarData(v).VInteger:=2;
end;想请教一下,在TVarData的定义中,并没有VInteger字眼,为何能访问TVarData(v).VInteger???

解决方案 »

  1.   

      TVarData = packed record 
        case Integer of 
          0: (VType: TVarType; 
              case Integer of 
                0: (Reserved1: Word; 
                    case Integer of 
                      0: (Reserved2, Reserved3: Word; 
                          case Integer of 
                            varSmallInt: (VSmallInt: SmallInt); 
                            varInteger:  (VInteger: Integer); 
                            varSingle:  (VSingle: Single); 
                            varDouble:  (VDouble: Double); 
                            varCurrency: (VCurrency: Currency); 
                            varDate:    (VDate: TDateTime); 
                            varOleStr:  (VOleStr: PWideChar); 
                            varDispatch: (VDispatch: Pointer); 
                            varError:    (VError: HRESULT); 
                            varBoolean:  (VBoolean: WordBool); 
                            varUnknown:  (VUnknown: Pointer); 
                            varShortInt: (VShortInt: ShortInt); 
                            varByte:    (VByte: Byte); 
                            varWord:    (VWord: Word); 
                            varLongWord: (VLongWord: LongWord); 
                            varInt64:    (VInt64: Int64); 
                            varString:  (VString: Pointer); 
                            varAny:      (VAny: Pointer); 
                            varArray:    (VArray: PVarArray); 
                            varByRef:    (VPointer: Pointer); 
                        ); 
                      1: (VLongs: array[0..2] of LongInt); 
                  ); 
                2: (VWords: array [0..6] of Word); 
                3: (VBytes: array [0..13] of Byte); 
              ); 
          1: (RawData: array [0..3] of LongInt); 
      end; 
      

  2.   

    case Integer of 嵌套几层,应该怎么理解呢???
      

  3.   

    如果你懂C++的话,应该了解一个联合(union)结构
      

  4.   

    union我明白,但嵌套几层的话就比较难理解
      

  5.   

    不是嵌套,那是Delphi当中Union的语法结构.
      

  6.   

    case Integer of 里不是还有case Integer of 吗?