关于vb6 Class
VB6 的类对象变量,其实是一个结构体的指针,而这个结构体的第一个元素又是一个虚表的指针。
可以用下图表示:
如: dim x as Object
[x]-->
x其实长度只有4个字节,它的值是一个地址。
所以 varptr(x) 是求的x的地址,objptr(x)是求的x的值.
下面是一个趣味练习
'--mdlMain--start
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Sub main()
End Sub
Private Function FunPtr(f As Long) As Long
End Function
Private Sub MeMsg()
End Sub
'----mdlMain--end
’-----class1 code
Public Sub Msg()
End Sub
后记:
1但是这样其实是有一个问题的。因为类方法其实有一个this隐含参数的,所以最好最在MeMsg 加一个长整数参数,
2
其实这也给vb6实现复盖或继承类方法提供了一种思路,只要你先把要复盖的类的vTable,复制到自已定义的VTable中,然后把自已的pVTable指向这个新VTable
浙公网安备 33010602011771号