您的位置:程序门 -> vb -> 基础类



怎样遍历variant数组里的变量?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


怎样遍历variant数组里的变量?[已结贴,结贴人:mdzhao]
发表于:2007-04-28 11:39:38 楼主
variant的数组,里面的数据类型是我定义的结构体

我现在已经得到了数组大小
dim   yyy   as   variant
line.getinfo3arr   yyy
i   =   ubound(yyy,   1)   '取得数组字节数,从0起
dim   ds   as   component_info3
i   =   i   /   lenb(ds)   '取得数组大小

接下来的for怎么写呢?
发表于:2007-04-28 12:32:501楼 得分:0


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   是什么样子的类型?
发表于:2007-04-28 12:44:542楼 得分:0
to:cangwu_lee

是一个结构体

我只要一维的就够用了
为什么我写yyy(i).xxx   不行呢?
发表于:2007-04-28 12:46:203楼 得分:0
to:cangwu_lee

是一个结构体

我只要一维的就够用了
为什么我写yyy(i).xxx   不行呢?

提示
run-time   error   '424 ':
object   required
发表于:2007-04-28 13:06:304楼 得分:0
定一个结构体
再定义类型为结构体数组操作不是很方便吗?
发表于:2007-04-28 13:17:565楼 得分:0
是一个结构体

我只要一维的就够用了
为什么我写yyy(i).xxx   不行呢?

提示
run-time   error   '424 ':
object   required

是不是引用数组越界??
发表于:2007-04-28 13:37:186楼 得分:0
to:guyehanxinlei

这个是com里面传出来的。。。

没办法只能用这个
发表于:2007-04-28 13:37:237楼 得分:0
你要保证返回的数组是正确的,使用   watch   看看结果如何
发表于:2007-04-28 13:38:128楼 得分:0
to:alexdong2002
我写
yyy(0).xxx
yyy(1).xxx
也这样
发表于:2007-04-28 16:10:149楼 得分:0
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
发表于:2007-04-28 20:42:1810楼 得分:0
dim   uuu(23)   as   byte   '结构体大小是24,数组下标默认从0开始
copymemory   uuu(0),   byval   varptr(yyy),   24 '最好这么写
发表于:2007-04-28 20:43:2011楼 得分:0
另外,varptr已经被vb直接支持,不必声明
发表于:2007-04-29 11:53:1712楼 得分:20
variant   变量能够存储所有系统定义类型的数据,它不能保存用户自定义类型。

variant若保存的是数组,那它的varptr(yyy)+8位置才是指向数组的safearray结构的指针,safearray结构起始地址偏移12才是真正的数组数据首元素指针。

你这样copymemory是取不到数据的。

建议不要用variant   变量,你这里只能用结构体数组。当然,若传入的就是数据指针,你可以用long获取后,再copymemory进自己的结构体数组,不过若结构体中包括string,情况会更复杂。


发表于:2007-04-29 13:46:0813楼 得分:0
按homezj(小吉)   说的方法找到了,谢谢


快速检索

最新资讯
热门点击