急!!!!高手快来呀,在线等待!!

zhsh200 2003-06-03 05:12:57
我遇到了个奇怪的问题,请大家把我看一下原因。
下面的问题是这样的,我从服务程序读到了做为Vairant数组传来的图片数据,但我在具体读取数组的内容时,程序抛出异常如下:Vairant is not an array.


procedure TFormWatchLocal.Button1Click(Sender: TObject);
var VehBaseInfo:WideString;
PicNum:integer;
// ImgBuff:OleVairant;
jepgstream:Tjpegimage;
v: OleVariant;
b,e,i,iCount:integer;
Stream1:TMemoryStream;
p: Pointer;
j:longint;
begin
// v:=vararraycreate([0,2],varVariant);//// 创建一个2个元素的数组

// v := VarArrayCreate([0, 2],varVariant);




//测试用MessageDlg
MessageDlg('Exiting the Object Pascal application.1', mtInformation,
[mbOk], 0);

//从服务程序得到需要的信息,其中参数 V 为Variant
WatchPostServer1.GetCurrVeh(VehBaseInfo,v,PicNum);


//测试用MessageDlg
MessageDlg('Exiting the Object Pascal application.2', mtInformation,
[mbOk], 0);
// v := VarArrayCreate([0, 4], varByte);


if VarIsArray(v) then
begin
b := VarArrayLowBound(v,1);
e := VarArrayHighBound(v,1);
e:=e-b+1;

///程序运行时MessageDlg显示为‘0 wo 3 '说明程序已获得数组
MessageDlg(intTostr(b)+'wo'+IntTostr(e), mtInformation,
[mbOk], 0);


//程序向下时抱我提到的错误,请大家瞧瞧
for iCount := VarArrayLowBound(v, 1) to VarArrayHighBound(v, 1) do
begin
Stream1:=TMemoryStream.Create;
jepgstream:=Tjpegimage.Create;
p := VarArrayLock(v[iCount]);
try
Stream1.Write(p^, VarArrayHighBound(v[iCount],1) + 1);
finally
VarArrayUnlock(v[iCount]);
end;
Stream1.Position := 0;
j:=Stream1.Size;
Stream1.Position:=0;
jepgstream.LoadFromStream(Stream1);
case i of

1:ImgPano.Picture.Bitmap.Assign(jepgstream);
2:ImgFeat.Picture.Bitmap.Assign(jepgstream);
3:ImgNo.Picture.Bitmap.Assign(jepgstream);
end;
Stream1.Free;
end;
end;
end;

...全文
21 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧