不知道为什么,我自定义的 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
//这个两个函数来自网络
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
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货