OleVariant 是传过来的二维数组 如何取值呀???? 急。

解决方案 »

  1.   

    procedure TRichViewEditX.TestRead(arrValue: OleVariant);
      

  2.   

    http://blog.csdn.net/aiirii/archive/2004/11/29/197386.aspx
    参考上面链接,可以转换成流,然后根据数组类型和数据类型长度,逐次读出来
      

  3.   

    可不可以 直接遍历OleVariant 所指向的二维数组???
      

  4.   

    输入变体参数:
    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;
      

  5.   


    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);
    ..........
      

  6.   

    if VarisArray(OleVariant) then
    begin
      for i:= low(Olevariant) to High(OleVariant) do
      begin
        for j:= 0 to 1 do
        begin
          showmessage(vartoStr(olevariant[i,j]));
        end;
      end;