回调函数总结(个人见解):
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就是回调函数的类型
android 接口回调传布局 接口回调函数
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章