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里测试时都没问题的。
火山的静态函数都默认具有CALLBACK前缀的,像你上面的,使用的是默认_CDCEL调用模式,在对应火山静态方法上使用属性值为"@_CDCEL"的"@视窗.前缀文本"属性加上该前缀就行了. 飞扬工作室 发表于 2021-3-11 22:35
火山的静态函数都默认具有CALLBACK前缀的,像你上面的,使用的是默认_CDCEL调用模式,在对应火山静态方法上使 ...
谢谢!已经解决了 本帖最后由 SilverS 于 2021-3-12 16:21 编辑
飞扬工作室 发表于 2021-3-11 22:35
火山的静态函数都默认具有CALLBACK前缀的,像你上面的,使用的是默认_CDCEL调用模式,在对应火山静态方法上使 ...
吴总,请问这样的回调是否应该弄成火山里的事件方法呢?,我试过可是不知道怎样获取非静态成员方法地址 所以实现不了,不知有其它办法可以将这样的回调实现为火山的事件的吗? 直接在回调函数里面调用火山的事件方法就行了啊 本帖最后由 SilverS 于 2021-3-14 02:57 编辑
飞扬工作室 发表于 2021-3-12 20:02
直接在回调函数里面调用火山的事件方法就行了啊
可是回调是静态方法,里面无法调用当前实例的事件方法呀。
把对象指针作为用户**传递过去 本帖最后由 SilverS 于 2021-3-14 11:44 编辑
飞扬工作室 发表于 2021-3-14 09:05
把对象指针作为用户**传递过去
很多办法都试过了,回调的参数只能这样 改不了,改了后就接收不到数”据了, 因为这个是回调是由封装库内部调用的。
页:
[1]