c++调用c时回调函数的处理

本文介绍如何在C++中正确调用C语言库函数,特别是如何处理回调函数的问题。通过实例展示了如何定义静态成员函数作为回调,并对外部指针进行管理,确保能顺利调用到类的成员函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      在c++调用c程序时,回调函数是不能直接使用的,以c++调用c的Gtk函数为例, 比如,在g_idle_add (init, NULL);

这句话中,一旦idle就会调用函数init(), 这个init()还会对类的成员变量进行处理。

这时,假如把init()简单地定义为类的普通成员函数就会出现类型不匹配的错误,因为g_idle_add()要求它的第一个参数

是个普通的函数指针,而现在却会被编译为GtkScreen::init()函数指针,(假定我要写的类叫做GtkScreen)。

     解决办法就是:

    1. 在GtkScreen的头文件中将函数init()声明为static的。

    2. 在类的实现文件(GtkScreen.cpp)中所有的函数之外定义一个静态的指向类的指针: static GtkScreen* pobject;

    3. 在构造函数中对pobject赋值: pobjct = this; (实际上不必一定在构造函数中,只要是比调用语句早执行的地方就行)

    4. 在要调用的函数(init)中, 所有类的成员变量前面都加上pobject->

    就行啦。

同时要注意,在c++中include c的库文件, include 语句的前面要加上
#ifdef __cplusplus
extern "C" {
#endif
后面要加上

#ifdef __cplusplus
}
#endif

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值