不知道为什么,我自定义的 olevariant 类型就是不能转
//这个两个函数来自网络
procedure VariantToStream(const V: OLEVariant; Stream: TMemoryStream);
var
  P: Pointer;
begin
  Stream.Position := 0;
  Stream.Size := VarArrayHighBound(V, 1) - VarArrayLowBound(V, 1) + 1;
  P := VarArrayLock(V);
  Stream.Write(P^, Stream.Size);
  VarArrayUnlock(V);
  Stream.Position := 0;
end;procedure StreamToVariant(Stream: TMemoryStream; var V: OLEVariant);
var
  P: Pointer;
begin
  V := VarArrayCreate([0, Stream.Size - 1], varByte);
  P := VarArrayLock(V);
  Stream.Position := 0;
  Stream.Read(P^, Stream.Size);
  VarArrayUnlock(V);
end;我的事例1 这样的报错
var
olestr:OleVariant;
Stream:TMemoryStream;begin
Stream:=TMemoryStream.Create;//olestr :=ClientDataSetAn1.Data;olestr :=VarArrayCreate([0, 1], varVariant);
olestr[0]:='test';
olestr[1]:= ClientDataSetAn1.Data;
VariantToStream(olestr,Stream);
StreamToVariant(Stream,olestr);
 ShowMessage(olestr[0]);
 ClientDataSetAn3.Data := olestr[1];
end;
我的事例2 这样的可以转正常数据可以转过去Dbgrid 里能正常显示数据
var
olestr:OleVariant;
Stream:TMemoryStream;begin
Stream:=TMemoryStream.Create;olestr :=ClientDataSetAn1.Data;VariantToStream(olestr,Stream);
StreamToVariant(Stream,olestr);ClientDataSetAn3.Data := olestr;
end;
不知道为什么 
这样的拆开的写下,在转一下,转回来,就出错
olestr :=VarArrayCreate([0, 1], varVariant);
olestr[0]:='test';
olestr[1]:= ClientDataSetAn1.Data;真的是不知道为什么,真诚期待师傅大侠解答delphi