递归火山软件开发平台

标题: C语言函数无法调用火山取得的静态函数地址 [打印本页]

作者: SilverS    时间: 2021-3-10 15:54
标题: C语言函数无法调用火山取得的静态函数地址
本帖最后由 SilverS 于 2021-3-10 16:16 编辑

在封装Cairo图形库时遇到一个函数 需要为其提供一个回调函数地址,就是下面函数中的第四个参数

这是是那个函数的声明:
cairo_set_user_data (cairo_t *cr ,
                              const cairo_user_data_key_t *key ,
                              void *user_data,
                              cairo_destroy_func_t destroy);

这是上面第四个参数的指针定义:
void(*cairo_destroy_func_t) (void *data);




我使用火山的 取静态函数地址()取得了一个静态方法地址 然后后传递进去却无法触发此回调,这是怎么回事啊?我在VS里测试时都没问题的。

作者: 飞扬工作室    时间: 2021-3-11 22:35
火山的静态函数都默认具有CALLBACK前缀的,像你上面的,使用的是默认_CDCEL调用模式,在对应火山静态方法上使用属性值为"@_CDCEL"的"@视窗.前缀文本"属性加上该前缀就行了.
作者: SilverS    时间: 2021-3-12 14:36
飞扬工作室 发表于 2021-3-11 22:35
火山的静态函数都默认具有CALLBACK前缀的,像你上面的,使用的是默认_CDCEL调用模式,在对应火山静态方法上使 ...

谢谢!已经解决了
作者: SilverS    时间: 2021-3-12 16:17
本帖最后由 SilverS 于 2021-3-12 16:21 编辑
飞扬工作室 发表于 2021-3-11 22:35
火山的静态函数都默认具有CALLBACK前缀的,像你上面的,使用的是默认_CDCEL调用模式,在对应火山静态方法上使 ...

吴总,请问这样的回调是否应该弄成火山里的事件方法呢?,我试过可是不知道怎样获取非静态成员方法地址 所以实现不了,不知有其它办法可以将这样的回调实现为火山的事件的吗?
作者: 飞扬工作室    时间: 2021-3-12 20:02
直接在回调函数里面调用火山的事件方法就行了啊
作者: SilverS    时间: 2021-3-14 02:45
本帖最后由 SilverS 于 2021-3-14 02:57 编辑
飞扬工作室 发表于 2021-3-12 20:02
直接在回调函数里面调用火山的事件方法就行了啊

可是回调是静态方法,里面无法调用当前实例的事件方法呀。
(, 下载次数: 467)


作者: 飞扬工作室    时间: 2021-3-14 09:05
把对象指针作为用户**传递过去
作者: SilverS    时间: 2021-3-14 11:40
本帖最后由 SilverS 于 2021-3-14 11:44 编辑
飞扬工作室 发表于 2021-3-14 09:05
把对象指针作为用户**传递过去

很多办法都试过了,回调的参数只能这样 改不了,改了后就接收不到数”据了, 因为这个是回调是由封装库内部调用的。





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