递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 7758|回复: 7
打印 上一主题 下一主题

[类库封装] C语言函数无法调用火山取得的静态函数地址

[复制链接]

17

主题

119

帖子

474

积分

中级会员

Rank: 3Rank: 3

积分
474
跳转到指定楼层
楼主
发表于 2021-3-10 15:54:56 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 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里测试时都没问题的。
回复

使用道具 举报

17

主题

119

帖子

474

积分

中级会员

Rank: 3Rank: 3

积分
474
8#
 楼主| 发表于 2021-3-14 11:40:41 | 只看该作者
本帖最后由 SilverS 于 2021-3-14 11:44 编辑
飞扬工作室 发表于 2021-3-14 09:05
把对象指针作为用户**传递过去

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

使用道具 举报

62

主题

1679

帖子

8629

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
8629
7#
发表于 2021-3-14 09:05:01 | 只看该作者
把对象指针作为用户**传递过去
回复

使用道具 举报

17

主题

119

帖子

474

积分

中级会员

Rank: 3Rank: 3

积分
474
6#
 楼主| 发表于 2021-3-14 02:45:56 | 只看该作者
本帖最后由 SilverS 于 2021-3-14 02:57 编辑
飞扬工作室 发表于 2021-3-12 20:02
直接在回调函数里面调用火山的事件方法就行了啊

可是回调是静态方法,里面无法调用当前实例的事件方法呀。


回复

使用道具 举报

62

主题

1679

帖子

8629

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
8629
5#
发表于 2021-3-12 20:02:49 | 只看该作者

回帖奖励 +10 金钱

直接在回调函数里面调用火山的事件方法就行了啊
回复

使用道具 举报

17

主题

119

帖子

474

积分

中级会员

Rank: 3Rank: 3

积分
474
地板
 楼主| 发表于 2021-3-12 16:17:07 | 只看该作者
本帖最后由 SilverS 于 2021-3-12 16:21 编辑
飞扬工作室 发表于 2021-3-11 22:35
火山的静态函数都默认具有CALLBACK前缀的,像你上面的,使用的是默认_CDCEL调用模式,在对应火山静态方法上使 ...

吴总,请问这样的回调是否应该弄成火山里的事件方法呢?,我试过可是不知道怎样获取非静态成员方法地址 所以实现不了,不知有其它办法可以将这样的回调实现为火山的事件的吗?
回复

使用道具 举报

17

主题

119

帖子

474

积分

中级会员

Rank: 3Rank: 3

积分
474
板凳
 楼主| 发表于 2021-3-12 14:36:22 | 只看该作者
飞扬工作室 发表于 2021-3-11 22:35
火山的静态函数都默认具有CALLBACK前缀的,像你上面的,使用的是默认_CDCEL调用模式,在对应火山静态方法上使 ...

谢谢!已经解决了
回复

使用道具 举报

62

主题

1679

帖子

8629

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
8629
沙发
发表于 2021-3-11 22:35:20 | 只看该作者
火山的静态函数都默认具有CALLBACK前缀的,像你上面的,使用的是默认_CDCEL调用模式,在对应火山静态方法上使用属性值为"@_CDCEL"的"@视窗.前缀文本"属性加上该前缀就行了.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-11-29 09:33 , Processed in 0.090273 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表