Variant的数组,里面的数据类型是我定义的结构体我现在已经得到了数组大小
Dim yyy As Variant
line.GetInfo3Arr yyy
i = UBound(yyy, 1) '取得数组字节数,从0起
Dim ds As COMPONENT_INFO3
i = i / LenB(ds) '取得数组大小接下来的For怎么写呢?

解决方案 »

  1.   

    Dim yyy As Variant
    line.GetInfo3Arr yyy
    i = UBound(yyy, 1) '取得数组字节数,从0起   ————二维数组?Dim ds As COMPONENT_INFO3
    i = i / LenB(ds) '取得数组大小 ———————————数组的大小,能这样取么?'——————二维数组的遍历
    for i=0 to ubound(yyy)
      for j=0 to ubound(yyy,1)
         ? yyy(i,j)
      next j
    next i
    COMPONENT_INFO3 是什么样子的类型?
      

  2.   

    to:cangwu_lee是一个结构体我只要一维的就够用了
    为什么我写yyy(i).xxx 不行呢?
      

  3.   

    to:cangwu_lee是一个结构体我只要一维的就够用了
    为什么我写yyy(i).xxx 不行呢?提示
    run-time error '424':
    object required
      

  4.   

    是一个结构体我只要一维的就够用了
    为什么我写yyy(i).xxx 不行呢?提示
    run-time error '424':
    object required是不是引用数组越界??
      

  5.   

    to:guyehanxinlei这个是com里面传出来的没办法只能用这个
      

  6.   

    你要保证返回的数组是正确的,使用 Watch 看看结果如何
      

  7.   

    to:alexdong2002
    我写
    yyy(0).xxx
    yyy(1).xxx
    也这样
      

  8.   

    to:cangwu_lee
    看了,里面的值没错
    variant的变量在watch里面都显示成byte了,于是我想如果能像c那样强制转换类型就ok了,可是不行。
    又想能copy出一份也可以,但是下面两种方法拷贝到的内容在watch里面看都不对,为什么呢?
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
    Private Declare Function VarPtr Lib "MSVBVM60" (var As Any) As Long
    Dim uuu(24) As Byte '结构体大小是24
    CopyMemory uuu(0), VarPtr(yyy), 24
    CopyMemory uuu(0), yyy, 24
      

  9.   

    Dim uuu(23) As Byte '结构体大小是24,数组下标默认从0开始
    CopyMemory uuu(0), byval VarPtr(yyy), 24'最好这么写
      

  10.   

    另外,VarPtr已经被vb直接支持,不必声明
      

  11.   

    Variant 变量能够存储所有系统定义类型的数据,它不能保存用户自定义类型。Variant若保存的是数组,那它的VarPtr(yyy)+8位置才是指向数组的SafeArray结构的指针,SafeArray结构起始地址偏移12才是真正的数组数据首元素指针。你这样CopyMemory是取不到数据的。建议不要用Variant 变量,你这里只能用结构体数组。当然,若传入的就是数据指针,你可以用Long获取后,再CopyMemory进自己的结构体数组,不过若结构体中包括String,情况会更复杂。
      

  12.   

    按homezj(小吉) 说的方法找到了,谢谢