有如下定义
i,j:integer;
iis:ISharedProperty;
spg:ISharedPropertyGroup;
oe:Olevariant;
begin
... ...
iis:=spg.CreateProperty('iis',exists);
... ...
oe:=vararraycreate([1,10],varInteger);
for i:=1 to 10 do
oe[i]:=0;
iis.Value:=oe;
... ...
oe:=iis.Value;
for i:=1 to 10 do
j:=oe[i];//出错
写的简单了些,但是就是出错,Variant is no an array大致意思是oe不是数组,我不明白为什么会这样,该怎么解决
i,j:integer;
iis:ISharedProperty;
spg:ISharedPropertyGroup;
oe:Olevariant;
begin
... ...
iis:=spg.CreateProperty('iis',exists);
... ...
oe:=vararraycreate([1,10],varInteger);
for i:=1 to 10 do
oe[i]:=0;
iis.Value:=oe;
... ...
oe:=iis.Value;
for i:=1 to 10 do
j:=oe[i];//出错
写的简单了些,但是就是出错,Variant is no an array大致意思是oe不是数组,我不明白为什么会这样,该怎么解决
procedure TForm1.Button1Click(Sender: TObject);
type
DBTableInfo = record
fieldname:string;
fieldvalue:string;
end;
type
DBTable = array[0..2] of DBTableInfo;
var
test:IVariantArray;
aaa:DBTable;
bbb:DBTable;
SendData,GettedData:OleVariant;
Size:Int64;
msgString:string;
i:integer;
v:Variant;
p:Pointer;
begin
test := CoVariantArray.Create;
v := VarArrayCreate([0,sizeof(DBTable)],varByte);
aaa[0].fieldname := 'bookid';
aaa[0].fieldvalue := '0';
aaa[1].fieldname := 'bookname';
aaa[1].fieldvalue := '射雕英雄传';
aaa[2].fieldname := 'bookauthor';
aaa[2].fieldvalue := '金庸'; p := VarArrayLock(v);
Move(aaa,p^,sizeof(DBTable));
VarArrayUnLock(v); sendData := v;
Size := 3;
test.GetArray(Size,SendData,GettedData);//两个参数简单互换,没有变
v := GettedData; p := VarArrayLock(v);
Move(p^,bbb,sizeof(DBTable));
VarArrayUnLock(v);
msgString := '';
for i := 0 to Size - 1 do
begin
msgString := '';
msgString := bbb[i].fieldname + ' ' + bbb[i].fieldvalue;
showmessage(msgString);
end;
test := nil;
end;测试过的,为什么这么写,忘啦。
for i:=1 to 10 do
oe[i]:=0;
iis.Value:=oe; oe:=iis.Value;
for i:=1 to 10 do
j:=oe[i];//出错
........
//这样应该不会出错吧?iis.value的再此取得是不是有问题
for i:=1 to 10 do
oe[i]:=0;
iis.Value:=oe;
。//这个地方你写了什么代码???
oe:=iis.Value;
for i:=1 to 10 do
j:=oe[i];//出错
var
spg:ISharedPropertyGroup;
iis:IsharedProperty;
exists:wordbool;
oe:olevariant;
i,j:integer;
begin
checkcallersec('manager');
try
spg:=CreateSharedPropertyGroup('Delphi Data');
if spg=nil then
raise Exception.Create('Can not Creat Shared Property Group');
except
setabort;
end;
iis:=spg.CreateProperty('iis',exists);
oe:=vararraycreate([1,10],varInteger);
for i:=1 to 10 do
oe[i]:=0;
iis.Value:=oe;
... ... //这地方其实还什么都没写那,打算以后写上,应该不影响
oe:=iis.Value;
for i:=1 to 10 do
j:=oe[i];
eastphoenix(红苹果)的方法我试了
可惜出来的不再是原来的数
iis.Value:=vararraycreate([1,10],varInteger);
然后循环赋值~
取的时候进行反操作
谢谢大家的关注