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; strupper如何用? delphi编程实现动态创建database link ClientDataset问题 取天数,小时,分钟的方法? 问一个关于TXMLDocument读取到汉字出错的问题 简单问题 关于QRMemo控件不能保持文本原有格式求助 关于TPageControl的小问题,谢谢! 一个程序广播一个消息,另一程序收到了两次啊!怎么办?(千山求教) how to make exe packer? 使用变更控制控件 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;