|
|
发表于 2008-3-17 01:11:00
|
显示全部楼层
Re:真没想到VB也可以这样用之指针技术
除非和VC写的DLL交互,否则没有必要。
VB的Object(对象变量)实际上就是指针。(IUnknown)
不过基本数据类型是没有指针的,但是,可以封装一个包装器:
'''Class CInteger'''''''
Public v As Integer
其他类型同理,这样就可以了,比如:
Dim p1 As CInteger,p2 As CInteger
Set p1 = new Integer
Set p2 = p1
Let p2.v = 10
Msgbox "p1 is :" + CStr(p1.v)
如果你觉得麻烦,可以用“类生成器”,新建一个属性v,选择“缺省属性”即可,然后:
Set p2 = p1 '把p2 指向 p1
Let p2 = p1 '把p1 的默认属性v的值,拷贝到p2
注意Set和Let是不同的哦
但是,怎样实现void * *,即指针的指针?同样也可以写一个包装器:
'''Class CPtrPtr ''''''指针的指针
Public v As Object
(这里不要用“缺省属性”,会出现歧义)
另外,VB不支持数组的赋值,为了做到这一点,有很多方法,
最懒的方法是,直接使用集合(Collection)
集合中可以加入Object类型的任何东西。对于基本数据类型,使用包装器即可。
要说的是,VB不支持泛型,模版,但是VB中的方法,属性,是后期绑定的,
实际上是通过 IDispatch::Invoke来调用的,而每个Class都实现了IDispatch,IUnknown.
所以不用管静态数据类型,直接调用即可,只不过速度慢,而且没有IDE的即时提示
集合中也可以放置集合,所以,就等于是动态 N 维数组。
这样,指针,指针的指针,指针的指针的指针,数组的指针,N 维数组。。。都齐全了。
|
|