递归火山软件开发平台

标题: 求一个非静态方法的类方法回调的方法 [打印本页]

作者: qaz2428119    时间: 2021-7-16 09:24
标题: 求一个非静态方法的类方法回调的方法
本帖最后由 qaz2428119 于 2021-7-16 10:05 编辑

就如标题一样,现在很多的类方法回调,都是使用的静态或全局类方法,难道火山自身就不支持非静态或全局方法的类方法回调吗?
就比如我要子类化一个窗口,就必须使用静态方法,如果我这个类是一个功能类,难道所以的类实例都要公用这一个静态类回调吗?
公用一个类回调其实没问题,有问题的是没法在静态方法回调中区分类实例的对象
总不能啥事都交给嵌入方法实现把
要是这样岂不成了 嵌入方法不是万能的,可没有嵌入方法是万万不能的最好是 直接一些,不要用什么实例数组或指针数组
强烈要求官方能尽快解决这个问题,


作者: 创世魂    时间: 2021-7-16 10:33
第一:没有一个具体的例子,没有明白你在描述什么。

第二:如果你是想问,静态方法能够调用当前类中的非静态。。这个可以实现的。
http://bbs.voldp.com/forum.php?mod=viewthread&tid=8011

参考这个启动线程的例子。
作者: qaz2428119    时间: 2021-7-16 13:22
创世魂 发表于 2021-7-16 10:33
第一:没有一个具体的例子,没有明白你在描述什么。

第二:如果你是想问,静态方法能够调用当前类中的非静 ...

静态回调 如果不能传递类实例指针是无法为每个类实例单独回调数据,线程那个是因为启动线程的函数自带一个自定义参数,只需传递有一个类指针,就可以调用类的所有方法或成员,
可有些API函数的回调,并不支持传递一个自定义参数 这个怎么办?
作者: 67564226    时间: 2021-7-16 14:18
本帖最后由 67564226 于 2021-7-16 14:21 编辑
qaz2428119 发表于 2021-7-16 13:22
静态回调 如果不能传递类实例指针是无法为每个类实例单独回调数据,线程那个是因为启动线程的函数自带一个 ...

这个问题我在易里面用过。

比如多参的   用  A|B|C|D|E|......

先按上面的方法把他们处理好。  然后 把这个弄好的,赋值给一个变量, 再取变量地址,就得到一个整数指针 就可以用这个整数传递了,
接收到这个地址方,只要再把这个指针到文本()之类的方法处理一下,还原回来就可以了。

要注意的是这个变量,最好使用程序集或全局。  用局部变量估计会给 当成垃圾回收的可能, 我没试过能不能传递数组指针,如果能传递数组指针那就更省事了。


作者: 伟业    时间: 2021-7-16 14:42
学习来...
作者: qaz2428119    时间: 2021-7-20 15:09
67564226 发表于 2021-7-16 14:18
这个问题我在易里面用过。

比如多参的   用  A|B|C|D|E|......

很多的API函数需要的回调都不支持自定义参数,说那些有毛用而且这和多参没有任何关系

作者: kyozy    时间: 2021-7-20 18:30
哪些API回调函数不能传递参数. 一般都可以传递的
作者: qaz2428119    时间: 2021-7-21 16:11
kyozy 发表于 2021-7-20 18:30
哪些API回调函数不能传递参数. 一般都可以传递的

大多数都不能传递自定义参数,还一般都能
就比如 子类化窗口过程,就不能传递自定义参数
作者: kyozy    时间: 2021-7-22 09:07
本帖最后由 kyozy 于 2021-7-22 09:10 编辑

子类化也可以想办法通过窗口句柄传递参数的, 还有什么不能传递参数的例子来看看.关键是传递this参数是不可能避免的, 就算你遇见不需要传递 this 的模块, 都是内部帮你传递好了的.

作者: kyozy    时间: 2021-7-23 16:55
qaz2428119 发表于 2021-7-21 16:11
大多数都不能传递自定义参数,还一般都能
就比如 子类化窗口过程,就不能传递自定义参数 ...

子类化可以通过窗口句柄传递, 你再说说还有哪些不能传递参数
作者: qaz2428119    时间: 2021-8-4 17:40
kyozy 发表于 2021-7-23 16:55
子类化可以通过窗口句柄传递, 你再说说还有哪些不能传递参数

我不是要传递参数
是要一个实例类一个自定义的回调函数
作者: kyozy    时间: 2021-8-15 10:50
qaz2428119 发表于 2021-8-4 17:40
我不是要传递参数
是要一个实例类一个自定义的回调函数

传递了 this 参数, 就不就可以在类成员函数回调了
作者: qaz2428119    时间: 2021-8-15 15:20
kyozy 发表于 2021-8-15 10:50
传递了 this 参数, 就不就可以在类成员函数回调了

问题是 取到的方法地址,不会自动添加上 this 参数,必须有用户自己主动添加这个 this 指针
作者: kyozy    时间: 2021-8-17 14:27
本帖最后由 kyozy 于 2021-8-17 14:36 编辑
qaz2428119 发表于 2021-8-15 15:20
问题是 取到的方法地址,不会自动添加上 this 参数,必须有用户自己主动添加这个 this 指针 ...

这有什么问题,  要么这些你自己处理, 不是用户处理.要么如果你需要用户自己提供非静态成员函数, 那估计你只能写成事件, 就好像火山自己的窗口事件那些一样.用户就只需要选择事件, 代码都不用写了.



作者: qaz2428119    时间: 2021-8-20 12:52
kyozy 发表于 2021-8-17 14:27
这有什么问题,  要么这些你自己处理, 不是用户处理.要么如果你需要用户自己提供非静态成员函数, 那估计你 ...

就比如 HOOK 系统函数 ,你给我写个 回调试试,我怀疑你根本就没理解
作者: kyozy    时间: 2021-9-1 00:06
HOOK的话必须是非成员函数, 因为要求参数一样, 而成员函数有一个隐藏的this参数, 也就是多一个参数.
作者: qaz2428119    时间: 2021-9-4 19:45
kyozy 发表于 2021-9-1 00:06
HOOK的话必须是非成员函数, 因为要求参数一样, 而成员函数有一个隐藏的this参数, 也就是多一个参数. ...

如果是使用非成员函数,就没有办法一个类实例对应一个回调,就只能共用回调,这样就导致只能是全局函数
作者: wangvoldp    时间: 2023-2-19 20:33
kyozy 发表于 2021-7-23 16:55
子类化可以通过窗口句柄传递, 你再说说还有哪些不能传递参数

SetTimer 就没法传递
作者: kyozy    时间: 2023-2-28 14:18
没传this参数的, 就没办法作为成员函数, 就算火山帮你实现, 也是传参数,只不过传的地方可能是其他地方, 比如寄存器, 反正都要找个地方传this
作者: qaz2428119    时间: 2023-2-28 21:58
kyozy 发表于 2023-2-28 14:18
没传this参数的, 就没办法作为成员函数, 就算火山帮你实现, 也是传参数,只不过传的地方可能是其他地方, 比 ...

就是这个问题,希望汇编高手帮忙实现这个功能
作者: fengshangren    时间: 2023-3-1 07:33
这是易语言用习惯了
作者: qaz2428119    时间: 2023-3-2 20:49
fengshangren 发表于 2023-3-1 07:33
这是易语言用习惯了

这不是用习惯不习惯的问题,有很多交互需要回调,需要注册为对象实例级回调,如果是一个类通用一个回调,你没法区分到底是那个类实例需要的回调,
作者: 空空道人    时间: 2024-6-16 00:46
  楼主是不是要这个东西:  n个回调的函数,跟着实例对象的,这样就不需要做分拣了。比如,tcp里,回来一个id,实例是100万个链接,你要根据id去找到实例,然后处理数据,你想把找这个过程省略的,对吧??




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4