易截截图软件、单文件、免安装、纯绿色、仅160KB

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


相关文档:

一道C笔试题

Author: Scurffybear Date: 2009.09.08
最近在招新人,下面是一道C的面试题,面试的印度人中,没有一个人做对,我粗看了一下题,在没有看答案前,我自己也做错了,嗯,是的,没啥不好意思的,我觉得这个题目很容易使人产生误解,又或者择C有深厚功底的人能躲过这一个障眼法?
以下是题目,
main()
{
char * ......

ASA局域网C/S架构配置最终完美超强版............


ASA局域网C/S架构配置最终完美超强版............
具体实现有两种,如下:
一、服务器端安装ASA,因为要使用ASA中自带的Sybase Central工具。
服务器端开启:scjview.exe(即:Sybase Central,注意不是Sybase Central-Sybase Central。界面如图:)
1、设置如下:file-new-server
服务器名字随便起(便于这个工具 ......

C命名习惯


全大写, 如果必要, 用连字符连接单词
#define SIZE_LIMIT 1024
#define CONFIG_DEBUG 1
#define PRODUCT_ID 0x1123
枚举
单词首字母大写, 不用连字符
enum {
KeyNumLock,
KeyShift,
Key1,
KayA
} Key;
......

function(p,a,c,k,e,d)

<script>
a=62;
function encode() {
var code = document.getElementById('code').value;
code = code.replace(/[\r\n]+/g, '');
code = code.replace(/'/g, "\\'
");
var tmp = code.match(/\b(\w+)\b/g);
tmp.sort();
var dict = [];
var i, t = '';
for(var i=0; i<tmp.length ......

编程求一元二次方程ax2+bx+c=0的根

突然发现自己连一元二次方程怎么算的都不知道了。想了半天,拿起笔来才顺手些了给x2+2x+1=0.悔恨啊。
#include "iostream"
#include "cmath"
using namespace std;
int main(){
double a,b,c;
double delta,x1,x2;
int sign,stop;
cout<<"输入3个系数a(a!=0),b,c"<<endl;
cin>>a>>b& ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号