回调函数总结(个人见解)

105 篇文章 0 订阅
88 篇文章 0 订阅
回调函数总结(个人见解):
1.    回调函数的实现    ==>    被调用者写
2.    写库的人    ==> 调用回调函数的人 ==> 调用者
2.1    调用者:
        1) 不关心谁是被调用者
        2) 只关心回调函数的原型及返回值
        3) 声明回调函数的接口,回调函数的实现交给被调用者去处理
2.2    被调用者
        1) 根据调用者声明的回调函数接口原型进行实现
        2) 实现规则由被调用者控制
        3) 被调用者可以修改实现规则
3.    若回调函数接口(返回值或参数列表)发生变化,则其实现或调用者都可能要修改代码!

如有不同意见,欢迎探讨!

软件模块之间总存在一定的接口,调用方式可分为三类: 同步调用,回调,异步调用
1. 同步调用最简单
2. 回调是异步调用的基础

许多编译器有几种调用规范。
如在Visual C++中,可以在函数类型前加_cdecl,_stdcall或者_pascal来表示其调用规范(默认为_cdecl)。
C++ Builder也支持_fastcall调用规范。
调用规范影响编译器产生的给定函数名,参数传递的顺序(从右到左或从左到右),堆栈清理责任(调用者或者被调用者)以及参数传递机制(堆栈,CPU寄存器等)。
将调用规范看成是函数类型的一部分是很重要的;不能用不兼容的调用规范将地址赋值给函数指针。

回调函数就好像是一个中断处理函数,系统在符合你设定的条件时自动调用。为此,你需要做三件事:

1. 声明;statci int __stdcall MyAdd(int x, int y)
2. 定义;int MyAdd(intx, int y){(实现)}
3. 设置触发条件,就是在你的函数中把你的回调函数名称转化为地址作为一个参数,以便于系统调用。
声明和定义时应注意:回调函数可以作为类的成员函数,但必须声明为静态方法。

--------------
在其它类、模块使用时要先导出那个回调类型
如:typedef BOOL(CS_NVR_CALLBACK* CS_NVR_fpVMapReport)(LPMON_ITEM pStuMonItem, LPCAM_ITEM pStuCamItem, long lParam);
其中CS_NVR_fpVMapReport就是回调函数的类型

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值