c++调用c时回调函数的处理
在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
相关文档:
深入理解并应用C51对标准ANSIC的扩展是学习C51的关键之一。因为大多数扩展功能都是直接针对8051系列CPU硬件的。大致有以下8 类: 8051存储类型及存储区域l; 存储模式l存储器类型声明l变量类型声明l 位变量与位寻址l 特殊功能寄存器(SFR)l C51指针l 函数属性具体说明如下(8031为缺省CPU)。
第一节 Keil C ......
c变成的对象大多是共享内存中申请,比较少用malloc直接来申请,所以链表设计一般是下面2中结构:
对象 --> 对象 --> 对象
对象 -->链表对象-->对象 -->链表对象
(1)对于第一种,链表直接关联到对象本身,所以如果一个对象在消亡时,没有及时清理掉链表关系,则会导致链表掉链。
(2)链表对象本身是一 ......
ASA局域网C/S架构配置最终完美超强版............
具体实现有两种,如下:
一、服务器端安装ASA,因为要使用ASA中自带的Sybase Central工具。
服务器端开启:scjview.exe(即:Sybase Central,注意不是Sybase Central-Sybase Central。界面如图:)
1、设置如下:file-new-server
服务器名字随便起(便于这个工具 ......
c文件操作就这么简单
文件操作,稍微一总结.。
FILE是一个结构体类型,在TC和VS中定义不相同,他的作用就是在fopen()之后保存了打开文件的信息。也就是说操作系统帮我们完成了,我们不用管,大大降低了难度吧。
首先我们考虑下对文件的操作,文件类型分为文本和二进制。读写文件的函数一般前面有个f,也就表示file,open ......
看了下官方文档的关于object c 的内存管理,总结下:
在iphone中object c 中的内存管理是通过计数器来管理的,每个对象内部都有一个计数器.新建一个对象,或者这个对象被其他对象引用,多会使计数器加1.Retain 增加计数器值 release 减少计数器值.当计数器为0时对象就deall ......