帮忙翻译一段代码,谢谢!!
在程序开头定义一个继承类,公布基类中protected的方法
type
{为方便写参数,新建了一个继承TCustomMemoryStream的类}
TMyStream = class(TCustomMemoryStream)
public
procedure SetPointer(Ptr: Pointer; Size: Longint);
end;
procedure TMyStream.SetPointer(Ptr: Pointer; Size: Integer);
begin
{公布基类的方法}
inherited; //问题1
end;
{将客户端传过来的OleVariant还原成数据库操作控件的参数值}
procedure TTEST_DELPHI.VariantToParameters(const v: OleVariant;
p: TParameters);
var
i: Integer;
Bounds: array[0..1] of Integer;
isArr: Boolean;
TempValue: Variant;
src: PChar; //问题2
TempStream: TMyStream; //自己定义的流类,为了将处理流类型的数据
begin
if not VarIsArray(v) then //如果当前返回为空,参数为空就直接返回
//问题3
begin
Exit;
end;
for i := 0 to p.Count - 1 do
begin
isArr := VarIsArray(v[i]); //判断当前的数据是否为数组,因为流类型的数据是采用这种方式转化的
if (isArr) then
begin
Bounds[0] := VarArrayLowBound(v[i], 1); //读出Array数组的首序号
Bounds[1] := VarArrayHighBound(v[i], 1); //读出Array数组的尾序号
TempValue := v[i];
src := VarArrayLock(TempValue);
TempStream := TMyStream.Create; //问题4 //创建MyStream的实例
TempStream.SetPointer(src, Bounds[1] - Bounds[0] + 1); //拷贝数据
TempStream.Position := 0; //初试化流的首地址
p.Items[i].LoadFromStream(TempStream, ftBlob); //赋值数据
TempStream.Free; //释放资源
VarArrayUnLock(TempValue);
end
else
begin
p.Items[i].Value := v[i]; //非流数据的类型就直接处理
end;
end;
end;
主要存在的问题的地方均做了说明