回调函数编写和注重点

来源:互联网 发布:货物找车软件 编辑:程序博客网 时间:2024/05/29 08:28
#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

原创粉丝点击