回调函数是什么时候被执行的???

sundl2268 2010-07-12 09:45:26
举个例子,比如说下面的函数,
pTmpFtpClient->SetDownloadCallBack(m_lpfnDownloadCallBack);
其中m_lpfnDownloadCallBack 为DownloadCallBack_T类型。

typedef int (*DownloadCallBack_T)(DETAIL_INFO_TYPE ucInfoType,const char* pMessage);

我像请教各位的是 在我的程序中执行到 pTmpFtpClient->SetDownloadCallBack(m_lpfnDownloadCallBack)这条语句的时候,是不是m_lpfnDownloadCallBack也就自行了。。》》》》 是同时执行的吗?
我看了网上的一些资料说是在适当的时候开始执行,实在是不理解!!!
...全文
1654 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sundl2268 2010-07-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jennyvenus 的回复:]
mov eax, 0x70000000
写错了
应该是
mov eax, dword ptr[ 0x70000000 ]吧。
[/Quote]

佩服,佩服,呵呵,理解得很深刻啊,相见恨晚,改天请你米西米西。。。
cdsnpeter 2010-07-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jennyvenus 的回复:]

所谓函数指针或回调函数,就是将函数的地址放到了一个变量中而已,假如一个函数的地址是 0x4011aa04,那么在汇编中

call 0x4011aa04就是调用了这个函数,如果将函数地址放到了eax中,再call eax,也是调用了这个函数。

将函数地址放到了eax中 ------- call eax,一个动作被分成了两步

你的 SetDownloadCallBack( m……
[/Quote]
学习了。
用户 昵称 2010-07-12
  • 打赏
  • 举报
回复
mov eax, 0x70000000
写错了
应该是
mov eax, dword ptr[ 0x70000000 ]吧。
用户 昵称 2010-07-12
  • 打赏
  • 举报
回复
所谓函数指针或回调函数,就是将函数的地址放到了一个变量中而已,假如一个函数的地址是 0x4011aa04,那么在汇编中

call 0x4011aa04就是调用了这个函数,如果将函数地址放到了eax中,再call eax,也是调用了这个函数。

将函数地址放到了eax中 ------- call eax,一个动作被分成了两步

你的 SetDownloadCallBack( m_lpfnDownloadCallBack ) 就是将
m_lpfnDownloadCallBack放到了某一个内存中暂存起来了,假设存储到了0x70000000处,以后再调用就是

mov eax, 0x70000000
call eax

所以是否调用了m_lpfnDownloadCallBack,要看SetDownloadCallBack函数的实现。
sundl2268 2010-07-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jennyvenus 的回复:]
是不是被执行,要看SetDownloadCallBack有没有调用这个函数,不要太在意什么函数指针、回调函数,跟普通变量是一样的,他只是一个函数的参数。
[/Quote]

恩,谢谢jennyvenus,呵呵,明白了!!!!
用户 昵称 2010-07-12
  • 打赏
  • 举报
回复
是不是被执行,要看SetDownloadCallBack有没有调用这个函数,不要太在意什么函数指针、回调函数,跟普通变量是一样的,他只是一个函数的参数。
sundl2268 2010-07-12
  • 打赏
  • 举报
回复 1
[Quote=引用 1 楼 jennyvenus 的回复:]
函数都是被动调用执行的,即使是回调函数,所谓适当的时候,就是程序分支运行到此的时候,对于你这句代码,估计是有数据下载的时候被执行。
[/Quote]

程序分支运行,那就是说当程序运行到 pTmpFtpClient->SetDownloadCallBack(m_lpfnDownloadCallBack)的时候,此时程序逻辑已经进入到SetDownloadCallBack()内部了,那此时m_lpfnDownloadCallBack执行了没有?
山伟 2010-07-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jennyvenus 的回复:]
函数都是被动调用执行的,即使是回调函数,所谓适当的时候,就是程序分支运行到此的时候,对于你这句代码,估计是有数据下载的时候被执行。
[/Quote]

学习
用户 昵称 2010-07-12
  • 打赏
  • 举报
回复
函数都是被动调用执行的,即使是回调函数,所谓适当的时候,就是程序分支运行到此的时候,对于你这句代码,估计是有数据下载的时候被执行。

16,472

社区成员

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

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

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