C语言注册回调实例

来源:互联网 发布:宝宝照片涂鸦软件 编辑:程序博客网 时间:2024/06/07 02:13

前言:在其他的帖子里面写过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;}