谁能帮我解释这句代码?

freeC 2011-08-18 08:32:49
m_mProcess.SendCommand(MPLAYER_CMD_YUVCB, CComVariant((long)YUVDataBack));//设置取得视频解码后数据的回凋函数

其中YUVDataBack是一个回调函数void CMpeg2BmpDlg::YUVDataBack(void * buf, long param);
CComVariant((long)YUVDataBack));这里怎么可以这样写呢,回调函数返回的是void,能强转long?
还有就是回调函数在这一句也会被调用吗,那谁给他传值?
...全文
68 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
freeC 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fishion 的回复:]
YUVDataBack会在其它地方被调用。因为32位的机器上,地址是32位的,long也是32位的,所以把函数的地址传给另外一个需要的地方进行调用
[/Quote]
我就是对这个不太理解,这个另外一个需要调用的地方是什么地方,能否举个简单的例子。回调函数是被操作系统调用,难道我们不知道什么时候调用?那岂不是不能控制程序了,还有什么意义呢?
fishion 2011-08-19
  • 打赏
  • 举报
回复
YUVDataBack会在其它地方被调用。因为32位的机器上,地址是32位的,long也是32位的,所以把函数的地址传给另外一个需要的地方进行调用
ndy_w 2011-08-19
  • 打赏
  • 举报
回复
只是把函数地址传走,这句不是调用
freeC 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 relunana 的回复:]
注意CComVariant((long)(void*)YUVDataBack)如果编成64bit有问题.要用UINT_PTR.
[/Quote]
3q,这个我大概了解了,就是对那个回调函数还不了解,他是这个时候调用吗?谁给他传值
??
freeC 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wshcdr 的回复:]
比如视频数据过来的时候, 操作系统会自动调用你的回调函数
[/Quote]
在网上看了些回调函数资料,结合程序在理解了下,总算弄懂了。谢谢大家的帮助。结贴了
wshcdr 2011-08-19
  • 打赏
  • 举报
回复
比如视频数据过来的时候, 操作系统会自动调用你的回调函数
relunana 2011-08-18
  • 打赏
  • 举报
回复
注意CComVariant((long)(void*)YUVDataBack)如果编成64bit有问题.要用UINT_PTR.
relunana 2011-08-18
  • 打赏
  • 举报
回复
YUVDataBack是函数是地址,相当于void*.

CComVariant((long)(void*)YUVDataBack)

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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