stream是创建的,错误出在varianttostream过程中p:=vararraylock(v)这里,报错:
invalid argument(无效的参数)。编译时通过,只是在触发varianttostream这个过程时,报错。
虽然现在我用文件交换替代了这个发放,解决了问题,但总是心不甘。
我在d6,d7(在不同地机器上)下都试过,每次都在触发时报错。
高兄,帮帮我。
下面是我的测试代码。
procedure tform1.v_to_s(const data
levariant;
var stre:tmemorystream);
var
p: Pointer;
begin
p := VarArrayLock(Data);
try
Stre.Write(p^, VarArrayHighBound(Data,1) + 1);
finally
VarArrayUnlock(Data);
end;
end;
procedure TForm1.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;
procedure TForm1.ToolButton2Click(Sender: TObject);
var xmlobj : oleVariant;
i,count : integer;
list : tlistitem;
st : tmemorystream;
begin
st:=tmemorystream.Create;
xmlobj := CreateOLEObject('MSXML2.DOMDocument');
xmlobj.async := false;
xmlobj.load('http://www.delphibbs.com/delphibbs/rooms.asp');
memo1.Text :=xmlobj;
//xmlobj.Save('room.xml');
form1.v_to_s(xmlobj.data,st) ;
//报错
//xmlobj := unAssigned;
{ xmldocument1.LoadFromFile('room.xml');
count:=xmldocument1.DocumentElement.ChildNodes.Count;
caption:=xmldocument1.ChildNodes['DFWML'].AttributeNodes['type'].Text;
for i:=0 to count-1do
begin
list:=listview1.Items.Add;
list.Caption:=xmldocument1.DocumentElement.ChildNodes
.Text;
list.SubItems.Add(xmldocument1.DocumentElement.ChildNodes.AttributeNodes[0].text);
end;
}
end;