addressof为什么不能指向类中的成员函数,只能指向普通模块中的函数。

ali_wz 2010-07-07 11:07:03
我想在一个类的成员函数downloaddir中使用addressof来指向该类的另一个成员函数downloadfile,但是不行。

请问如何解决此类的问题。
...全文
213 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
东方之珠 2010-07-09
  • 打赏
  • 举报
回复
VB标准模块中函数的参数是可以作为返回参数的,但必须声明成ByRef类型。
ali_wz 2010-07-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lyserver 的回复:]
这是由编译过程决定的,addressof表示函数指针,它只对编译时地址确定的函数有效,而类成员函数编译时地址无法确定,而是由用户实例化时动态生成的,因此无法使用address运算符。如果想获得类成员函数地址,可参考我博客中《获得VB类成员函数指针》一文。
[/Quote]

请问《获得VB类成员函数指针》中Index是从0开始还是从1开始,还有就是这个函数位置到底怎么确定。是按照成员函数定义的位置确定吗?
嗷嗷叫的老马 2010-07-07
  • 打赏
  • 举报
回复
顶江南兄
xuggzu 2010-07-07
  • 打赏
  • 举报
回复
顶1楼。
一句话概括:vb6类中的函数为非静态成员函数,运行时才可确定函数入口地址。
jhone99 2010-07-07
  • 打赏
  • 举报
回复
lyserver 2010-07-07
  • 打赏
  • 举报
回复
这是由编译过程决定的,addressof表示函数指针,它只对编译时地址确定的函数有效,而类成员函数编译时地址无法确定,而是由用户实例化时动态生成的,因此无法使用address运算符。如果想获得类成员函数地址,可参考我博客中《获得VB类成员函数指针》一文。
嗷嗷叫的老马 2010-07-07
  • 打赏
  • 举报
回复
分结错了吧?
ali_wz 2010-07-07
  • 打赏
  • 举报
回复
唉,我的类太长了,自己都数不清那个函数到底是第几个了。干脆曲线救国,在模块里面写一个函数,调用成员函数吧。不过还是要感谢lyserver,毕竟是高手,受教了。
PctGL 2010-07-07
  • 打赏
  • 举报
回复
Tiger_Zhao 2010-07-07
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 pctgl 的回复:]4 个[/Quote]
你要是说“返回值也是一个参数”,估计楼主更晕了。
PctGL 2010-07-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 tiger_zhao 的回复:]

你准备好处理参数的传递问题没有?
类成员函数是必须依赖对象实例才能运行的,按照调用约定参数堆栈中首先要压入一个对象指针。
换句话说,下面的函数在 Module 中就是 2 个参数,在 Class 中就是 3 个参数。
VB code
Function Add(ByVal v1 As Long, Byval v2 As Long) As Long
...
End Function
……
[/Quote]

4 个
lyserver 2010-07-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ali_wz 的回复:]
引用 1 楼 lyserver 的回复:
这是由编译过程决定的,addressof表示函数指针,它只对编译时地址确定的函数有效,而类成员函数编译时地址无法确定,而是由用户实例化时动态生成的,因此无法使用address运算符。如果想获得类成员函数地址,可参考我博客中《获得VB类成员函数指针》一文。


请问《获得VB类成员函数指针》中Index是从0开始还是从1开始,还有就是这个函数位置到底……
[/Quote]
第一条:位置从1开始的。
第二条:实例化类对象时,所有public的函数/方法/属性的位置会自动按顺序排在前面,private的函数/方法/属性位置自动按顺序排在后面。
你还可以参照我的那篇《在VB的类模块中使用定时器》文章,代码较少,读起来就容易理解了。
不过话说回来,我还是推荐是使用adressof运算符指向标准模块中的函数。
Tiger_Zhao 2010-07-07
  • 打赏
  • 举报
回复
你准备好处理参数的传递问题没有?
类成员函数是必须依赖对象实例才能运行的,按照调用约定参数堆栈中首先要压入一个对象指针。
换句话说,下面的函数在 Module 中就是 2 个参数,在 Class 中就是 3 个参数。
Function Add(ByVal v1 As Long, Byval v2 As Long) As Long
...
End Function

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧