C语言注册回调实例

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




  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值