如何想实现回调函数的机制

incats 2005-11-14 04:22:48
实现回调时, 往往回调函数需要接收一些参数, 对这些参数进行处理就可以了. 问题是, 自己想写一个函数,让其某个参数是回调函数, 怎么把参数传递出去呢? 有没有相关的代码.
...全文
282 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyelf 2005-11-14
  • 打赏
  • 举报
回复
也许没说明白,重新表述一下:
typedef void (*FNCALLBACK)(int, LPVOID);
void FunSample(FNCALLBACK fnRoutine,// 回调函数

那么在定义FunSample的时候把该参数也输入,比如这么定义
void FunSample(PFNCALLBACK fnRoutine, LPVOID pContext,...)
{
...
}
亿云力科技 2005-11-14
  • 打赏
  • 举报
回复
全局变量,或者如楼上所说的
ddmor 2005-11-14
  • 打赏
  • 举报
回复
函数指针也当成参数的,然后在程序内部使用该函数指针就可以了。
注意,需要在函数定义前加上CALLBACK定义,即__stdcall,就可以兼容其他callBack类型的函数了。
typedef int (CALLBACK *MAXMINFNC)(int,int);

int CALLBACK Max(int i1,int i2)
{
return i1>i2?i1:i2;
}

int CALLBACK Min(int i1,int i2)
{
return i1<i2?i1:i2;
}

int TestFnc(MAXMINFNC fnc,int i1,int i2)
{
return fnc(i1,i2);
}

int main()
{
int iRst;
iRst=TestFnc(Max,20,30);
cout<<"Max="<<iRst<<endl;
iRst=TestFnc(Min,20,30);
cout<<"Min="<<iRst<<endl;
return 0;
}
incats 2005-11-14
  • 打赏
  • 举报
回复
也许没说明白,重新表述一下:
typedef void (*FNCALLBACK)(int, LPVOID);
void FunSample(FNCALLBACK fnRoutine,// 回调函数

实现回调时, 自然是定义一个函数
void fnCallBack(int, LPVOID){...}

那么在FunSample里, 如何把LPVOID的指针传出来, 以便后续的回调函数fnCallBack里去使用?
flyelf 2005-11-14
  • 打赏
  • 举报
回复
函数指针也可以是某个参数
比如定义一个回调函数的原型如下:
typedef void (*FNCALLBACK)(int);
某个函数有回调函数为参数,则可以如下定义:
void FunSample(FNCALLBACK fnRoutine,// 回调函数
...)
{
...
}

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧