Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2352752
  • 博文数量: 473
  • 博客积分: 12252
  • 博客等级: 上将
  • 技术积分: 4307
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-12 10:02
文章分类

全部博文(473)

文章存档

2012年(8)

2011年(63)

2010年(73)

2009年(231)

2008年(98)

分类: C/C++

2009-09-24 14:30:15

以前用过好几次回调,老忘记,先做下记录,以备后用:
.h文件

#ifndef SRC_H_
#define SRC_H_
#ifdef __cplusplus
extern "C" {
#endif

//定义回调函数

typedef int ( *CB_CALLBACK )( void *cb_data, int colnum, const char *colvalue, const char *colname );

//调用回调函数

int test( const char *sql, CB_CALLBACK cb_func, void *cb_data );

#ifdef __cplusplus
}
#endif
#endif /* SRC_H_ */


调用回调的.c文件

#include "src.h"

int test( const char *sql, CB_CALLBACK cb_func, void *cb_data)
{
    int i;
    int ret = -1;

    if(!sql)
    {
        ret = -2;
    }
    //由于我是在数据库中应用,所以这里可以当成取结果的循环

    for(i=0; i<5;i++)
    {
        if(cb_func(cb_data, i, "aaaaaaaaa", "test")) //当回调返回不等于0的数值的时候就终止循环

        {
            ret = 0;
            break;
        }
    }
    return ret;
}


测试.c文件

#include <stdio.h>
#include <string.h>

#include "src.h"

typedef struct
{
    int num;
    char data[256];
}test_t;
//要实现的回调函数

int cb_test( void *cb_data, int colnum, const char *colvalue, const char *colname )
{
    test_t *data = (test_t *)cb_data;

    if(data->num != colnum)
    {
        printf("%d---%s----%s\n", colnum, colvalue, colname);
        return 0;
    }
    else //等于3终止

    {
        sprintf(data->data, "%s", colvalue);
        return 1;
    }
}

int main()
{
    int ret = -1;
    test_t cb_data;
    memset(&cb_data, 0, sizeof(test_t));
    cb_data.num = 3;

    ret = test( "who are you?", cb_test, &cb_data);
    printf("main(): %d\n", ret);
    if(!ret)
    {
        printf("接收到的数据是:%s\n", cb_data.data);
    }

    return 0;
}


阅读(1153) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~