前言:在其他的帖子里面写过C++的注册回调实例,今天再把c的注册回调写进去,注册回调在实际的项目过程中有很大的用处
注册回调函数hpp文件:
#ifndef __API_H_
#define __API_H_
typedef enum
{
STUDENT_INFO,
TEACHER_INFO,
}StructType;
typedef void(*GuiCallBack)(void *, StructType);
typedef struct
{
char name[100];
int age;
int grade;
}struStudent;
typedef struct
{
char name[100];
int age;
}struTeacher;
static GuiCallBack guiCallBack = (GuiCallBack)0;
void onInit(GuiCallBack pCallBack)
{
if (guiCallBack == nullptr)
{
guiCallBack = pCallBack;
}
}
void SetStudentinfo()
{
struStudent student;
//student.name[100] = "DF";
strcpy_s(student.name, "DF");
student.age = 27;
student.grade = 5;
guiCallBack(&student, STUDENT_INFO);
}
void SetTeacherInfo()
{
struTeacher teacher;
//teacher.name[100] = 'ZH';
strcpy_s(teacher.name,"ZH");
teacher.age = 33;
guiCallBack(&teacher,TEACHER_INFO);
}
#endif
主函数调用实例:
// RegisterCallback.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include"TestCall.hpp"
#include"API.hpp"
using namespace std;
void onGuiCallBack(void *data, StructType type)
{
switch ( type)
{
case STUDENT_INFO:
{
struStudent *info = (struStudent *)data;
cout <<"studentinfo: "<< info->name << " " << info->age << " " << info->grade << endl;
}
break;
case TEACHER_INFO:
{
struTeacher *info = (struTeacher *)data;
cout << "TeachInfo:" << info->name << " " << info->age << endl;
}
break;
default:
break;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
onInit(onGuiCallBack);
SetStudentinfo();
SetTeacherInfo();
system("pause");
return 0;
}