VC++中,如何定义callback函数和它的触发事件?
对于回调函数的编写始终是写特殊处理功能程序时用到的技巧之一。先介绍一下回调的使用基本方法与原理。
1、在这里设:回调函数为A()(这是最简单的情况,不带参数,但我们应用的实际情况常常很会复杂),使用回调函数的操作函数为B(), 但B函数是需要参数的,这个参数就是指向函数A的地址变量,这个变量一般就是函数指针。使用方法为:
int A(char *p); // 回调函数
typedef int(*CallBack)(char *p) ; // 声明CallBack 类型的函数指针
CallBack myCallBack ; // 声明函数指针变量
myCallBack = A; // 得到了函数A的地址
B函数一般会写为 B(CallBack lpCall,char * P,........); // 此处省略了p后的参数形式 。
所以回调机制可解为,函数B要完成一定功能,但他自己是无法实现全部功能的。 需要借助于函数A来完成,也就是回调函数。B的实现为:
B(CallBack lpCall,char *pProvide)
{
........... // B 的自己实现功能语句
lpCall(PpProvide); // 借助回调完成的功能 ,也就是A函数来处理的。
........... // B 的自己实现功能语句
}
// -------------- 使用例子 -------------
char *p = "hello!";
CallBack myCallBack ;
myCallBack = A ;
B(A, p);
以上就是回调的基本应用,本文所说的变身,其实是利用传入不同的函数地址,实现调用者类与回调函数所在类的不同转换。
VC++中,如何定义callback函数和它的触发事件?相关推荐
- 【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 重写 MetaClass#invokeMethod 方法拦截 JDK 中已经定义的函数 )
文章目录 一.重写 MetaClass#invokeMethod 方法拦截 JDK 中已经定义的函数 1.被拦截的 String#contains 方法原型 2.JDK 正常用法 3.拦截 Strin ...
- SQL SERVER中用户定义标量函数(scalar user defined function)的性能问题
SQL SERVER中用户定义标量函数(scalar user defined function)的性能问题 原文:SQL SERVER中用户定义标量函数(scalar user defined fu ...
- VC中使用低级音频函数WaveX播放声音文件
文章摘要: 本文讨论并实现了在VC++中使用低级音频函数WaveX播放声音文件的方法. -------------------------------------------------------- ...
- vc中操作INI文件函数
一 VC中操作INI文件函数 函数名 功能 备注 GetPrivateProfileInt 读取INI文件指定块中的键名对应的整数值. GetPriva ...
- Python中如何定义一个函数
任何编程语言知识它的基础知识都是有些枯燥的,我们一定要多练习, 多实践.下面小编来将一下Python中如何定义一个函数. 最后,如果你的时间不是很紧张,并且又想快速的提高,最重要的是不怕吃苦,建议你可 ...
- java addcallback函数_java中怎么使用callback函数?
UYOU 在很多场景,作为开发都会想到,在执行完毕一个任务的时候,能执行一个callback函数是多么好的事情.现在模拟一下这个情景:定义三个类.分别是主函数类.callback函数的接口类.业务处理 ...
- 在VC中使用MATLAB C++函数库
http://Tech.16C.Cn 在VC中使用MATLAB C/C++函数库 MATLAB广泛应用于线性代数.自动控制理论.数理统计.数字信号处理.时间序列分析.动态系统仿真等领域.因此如果在VC ...
- C语言中宏定义和函数的区别
前言 在C语言中,对于一些常用或通用的代码段的封装可以有两种方式:函数和宏定义. 这篇博客就来带大家梳理一下对于这两种方式我们在使用时应该如何抉择,以及它们的区别和优缺点. 宏定义和函数的区别 从程序 ...
- matlab 报错 保留变量,matlab中明明定义了函数变量总是报错
matlab定义符号函数 functiony=ff(t)t=input('t=');ift>=0y=sym('1');elsey=sym('0');end matlab中如何定义函数 matla ...
最新文章
- 第十六届全国大学生智能车安徽赛区承办学校参赛队伍
- 脑机接口和卷积神经网络的初学者指南(二)
- CSS样式----标记选择器
- DB2 常用命令小结
- [转]动态加载javascript
- 第 10 章 树结构的基础部分
- Word 模板引擎 poi-tl
- linux uwsgi 非root,ubuntu-除非root用户,否则uWSGI Emperor权限被拒...
- 同方linux系统怎样下载软件,同方易教管理平台V2.4使用方法
- ad中按钮开关的符号_弱电图纸中敷设方式符号表示大全
- excel行列互换_excel行列互换方法流程
- 计算机开机总要按f1键,华硕主板开机需要按F1键怎么解决?华硕主板开机按f1的解决方法...
- NANDFLASH与PSRAM
- 希腊女孩创办自媒体教希腊语,如今用户已达1000人
- 内网穿透基础概念---内网外网
- Asterisk常用命令
- 下载原版百度文库资料
- 什么是java工程师
- AMAX服务器安装双系统(win10,Ubuntu)记要
- 物联网学习篇:Python SDK接入阿里云物联网平台,接收服务端订阅消息
热门文章
- linux变量赋值用中括号,Shell脚本定义变量和重新赋值
- 实现java的outline功能_在单独的功能文件中重用Scenario Outline中的示例
- 双拼输入法键位图_谈谈小鹤双拼入门(1)
- 2019-11-18 自动控制原理的几个基本概念
- JaveWeb学习之Servlet(二):ServletConfig和ServletContext
- iOS app 右滑返回
- linux 如何对文件解压或打包压缩
- C. Present(二分 + 扫描线)
- U盘无法拷贝超过4G的大文件
- vue中computed(计算属性)和watch在实现父子组件props同步时的实际区分