OleVariant 是传过来的二维数组 如何取值呀???? OleVariant 是传过来的二维数组 如何取值呀???? 急。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 procedure TRichViewEditX.TestRead(arrValue: OleVariant); http://blog.csdn.net/aiirii/archive/2004/11/29/197386.aspx参考上面链接,可以转换成流,然后根据数组类型和数据类型长度,逐次读出来 可不可以 直接遍历OleVariant 所指向的二维数组??? 输入变体参数: VARIANT v; ::VariantInit(&v); v.vt = VT_ARRAY | VT_VARIANT; SAFEARRAYBOUND sab[1]; sab[0].lLbound = 0; sab[0].cElements=3; SAFEARRAY *psa = SafeArrayCreate(VT_VARIANT,1,sab); for (long i=0;i<3;i++) { SafeArrayPutElement(psa,&i,&i); } v.parray = psa; m_richview.TestRead(&v); ::SafeArrayDestroyData(psa); ::VariantClear(&v);获取处理:procedure TRichViewEditX.TestRead(var arrValue: OleVariant);var str:string; i,j:Integer; Hight1:Integer; Low1:Integer; Hight2:Integer; Low2:Integer; p: Pointer; varvar:array of Variant; svar:SAFEARRAY;begin ShowMessage('进来了。'); if not VarIsArray(arrValue) then begin ShowMessage('不是数组'); end; ShowMessage('是数组'); try Low1:=varArrayLowBound(arrValue,1); ShowMessage(IntToStr(Low1)); Hight1:=VarArrayHighBound(arrValue,1); ShowMessage(IntToStr(Hight1)); except ShowMessage('VarArrayHighBound 出错'); end; ShowMessage('Variant array has ' + IntToStr(VarArrayDimCount(arrValue)) + ' dimensions'); try ShowMessage(VarToStr(VarArrayGet(arrValue,[0]))); except ShowMessage('取数据出错'); end;end; var RePointer: Pointer; ReValue:Variant; measValues1: array of Double;..........ReValue:=MeasODValuebl[lngType];//MeasODValuebl返回Variant,12*8的2维数组RePointer := VarArrayLock(ReValue);CopyMemory(@measValues1[0], RePointer, Sizeof(double) * 96);//measValues1 12*8的2维数组VarArrayUnlock(ReValue);.......... if VarisArray(OleVariant) thenbegin for i:= low(Olevariant) to High(OleVariant) do begin for j:= 0 to 1 do begin showmessage(vartoStr(olevariant[i,j])); end; end; 如何使一个DBGridEH只显示30条记录? 怎样去掉字符串中的逗号 问个combobox控件的问题。 如何在存储过程中建立临时表? 急。如何改变控件中字体颜色,设置字体颜色属性为何不起作用 listbox中的add 怎样在菜单项前打勾???一定给分 怎么得到自己机器的IP地址? 为什么会产生空消息? 请问将string转为char用什么函数?好像delphi的联机帮助很不适合初学者用。哪有delphi函数的分类介绍? 使用变更控制控件 Delphi 分割文件
参考上面链接,可以转换成流,然后根据数组类型和数据类型长度,逐次读出来
VARIANT v;
::VariantInit(&v);
v.vt = VT_ARRAY | VT_VARIANT;
SAFEARRAYBOUND sab[1];
sab[0].lLbound = 0;
sab[0].cElements=3; SAFEARRAY *psa = SafeArrayCreate(VT_VARIANT,1,sab); for (long i=0;i<3;i++)
{
SafeArrayPutElement(psa,&i,&i);
}
v.parray = psa;
m_richview.TestRead(&v);
::SafeArrayDestroyData(psa);
::VariantClear(&v);获取处理:
procedure TRichViewEditX.TestRead(var arrValue: OleVariant);
var
str:string;
i,j:Integer;
Hight1:Integer;
Low1:Integer;
Hight2:Integer;
Low2:Integer;
p: Pointer;
varvar:array of Variant;
svar:SAFEARRAY;
begin
ShowMessage('进来了。');
if not VarIsArray(arrValue) then
begin
ShowMessage('不是数组');
end;
ShowMessage('是数组'); try
Low1:=varArrayLowBound(arrValue,1);
ShowMessage(IntToStr(Low1)); Hight1:=VarArrayHighBound(arrValue,1);
ShowMessage(IntToStr(Hight1)); except
ShowMessage('VarArrayHighBound 出错');
end;
ShowMessage('Variant array has ' + IntToStr(VarArrayDimCount(arrValue)) + ' dimensions');
try
ShowMessage(VarToStr(VarArrayGet(arrValue,[0]))); except
ShowMessage('取数据出错');
end;
end;
var
RePointer: Pointer;
ReValue:Variant;
measValues1: array of Double;
..........
ReValue:=MeasODValuebl[lngType];//MeasODValuebl返回Variant,12*8的2维数组
RePointer := VarArrayLock(ReValue);
CopyMemory(@measValues1[0], RePointer, Sizeof(double) * 96);//measValues1 12*8的2维数组
VarArrayUnlock(ReValue);
..........
begin
for i:= low(Olevariant) to High(OleVariant) do
begin
for j:= 0 to 1 do
begin
showmessage(vartoStr(olevariant[i,j]));
end;
end;