假如:有一个记录类型TARecord = Record 
                      Name: string; 
                      age: integer; 
                   end; 
如何转化成oleVariant通过DCOM传递出去呢,
到了中间层再转回来呢?
请指点

解决方案 »

  1.   

    procedure VariantToStream(const Data: OleVariant; Stream: TStream);
    var
      p: Pointer;
    begin
      p := VarArrayLock(Data);
      try
        Stream.Write(p^, VarArrayHighBound(Data,1) + 1);  //assuming low bound = 0
      finally
        VarArrayUnlock(Data);
      end;
    end;function StreamToVariant(Stream: TStream): OleVariant;
    var
      p: Pointer;
    begin
      Result := VarArrayCreate([0, Stream.Size - 1], varByte);
      p := VarArrayLock(Result);
      try
        Stream.Position := 0;  //start from beginning of stream
        Stream.Read(p^, Stream.Size);
      finally
        VarArrayUnlock(Result);
      end;
    end; function RecToVariant(Rec:TMyRecArr):variant;
    var
     p:PChar;
    begin
       Result:=VarArrayCreate([0,SizeOf(Rec) - 1],VarByte);
       p:=VarArrayLock(Result);
       try
         Move(Rec[1], p^, SizeOf(Rec))
       finally
          VarArrayUnlock(Result);
       end;
    end;procedure VariantToRec(Value:variant): TMyRecArr;
    var
     p:PChar;
     Size: Cardinal;
    begin
     size:=VarArrayHighBound(Value,1);
     p:=VarArrayLock(Value);
     try
        Move(p^, Result[1], Size)
     finally
        VarArrayUnlock(Value);
     end;
    end;