回调函数编写和注重点

#include <windows.h>
#include <stdio.h>

typedef void (__stdcall *connectcallback)(char* msg);

void __stdcall testcallback(char* msg)
{
    if(!strcmp(msg,"successful"))
    {
        printf("already conneted\n");
    }
    else if(!strcmp(msg,"failure"))
    {
        printf("conneting fail\n");
    }
}

int main(void)
{
    StartVenoVPN("veno1","veno1",testcallback);
    //在startvenovpn里面某个条件下实现对callback调用;startvenovpn可以在一个线程里调用回调函数;在回调函数里面实现消息传递;
}

写一个startvenovpn的函数就可以实现上面的代码。
回调函数和C++里面的虚函数有类似的作用,可以实现前人调用后人的代码也可后人调用前人的代码。

【完整详细示例】
可执行源码:

#include <windows.h>
#include <stdio.h>

/* 回调函数 */
typedef void (*connectcallback)(char* msg);
void  testcallback(char* msg)
{
    if(!strcmp(msg,"successful"))
    {
        printf("already conneted\n");
    }
    else if(!strcmp(msg,"failure"))
    {
        printf("conneting fail\n");
    }
}

void fun_callback(connectcallback c);
void main(void)
{
    fun_callback(testcallback);
}

void fun_callback(connectcallback a){
    printf("call sucessful\n");
    a("successful");
}

这个程序里和上个代码段有相似之处也有不同之处。相似在于都使用了同一个内容的回调函数,然不知是否注意到,这两外函数定义的不同之处。这也是回调函数很容易定义出错的地方。

1. 回调函数的定义和回调指针的定义的参数应完全相同。
2. 回调函数的定义和回调指针的定义的返回值要完全相同,并包类型声明。如:__stdcall要同有同无
3. 回调函数定义为类成员函数时,类中声明要为static

posted @ 2012-08-10 14:10  upendi  Views(290)  Comments(0Edit  收藏  举报