以前用过好几次回调,老忘记,先做下记录,以备后用:
.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;
}
|
阅读(1174) | 评论(0) | 转发(0) |