如何获得一个回调函数中的数据

DoubleKill2014 2014-09-17 04:04:03
场景是有一个大华的网络摄像头,通过如下方式来获得视频流
CLIENT_SetRealDataCallBack(m_lRealPlayHandle, RealDataCallBack, (LDWORD)this);
目前已成功的调用,其中的RealDataCallBack是一个回调函数,函数的原型如下:
void __stdcall RealDataCallBack(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer, DWORD dwBufSize, LDWORD dwUser)
其中的pbuffer是数据,我想获得这个数据信息该如何做?
...全文
1925 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
Nico_拉倒 2017-01-12
  • 打赏
  • 举报
回复
楼主解决问题了吗,跟你一样的问题
夜行者亡灵 2014-10-19
  • 打赏
  • 举报
回复
楼主 我现在也遇到你这个问题 不知你解决了么 给点建议 谢谢!
_小c童心未泯 2014-10-08
  • 打赏
  • 举报
回复
同样遇到这个问题,想问下楼主解决的怎么样了?
DoubleKill2014 2014-09-18
  • 打赏
  • 举报
回复
引用 18 楼 SP_daiyq 的回复:
[quote=引用 15 楼 DoubleKill2014 的回复:] [quote=引用 11 楼 SP_daiyq 的回复:] 设置回调函数后,在回调中直接使用callback函数的参数就可以了啊,回调不是自己调用,系统调用后会给你传参数 void __stdcall RealDataCallBack(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer, DWORD dwBufSize, LDWORD dwUser) { //这里编写你的代码 // 直接使用参数,如果要pBuffer的数据就这样: memcpy(g_pBuffer, pBuffer, dwBufSize); // g_pBuffer为全局的buffer指针 }
那象dwDataType这个形参该如何传入呢?[/quote] 参数是系统传入的,你在函数里直接拿过来用就可以了[/quote] 但是这个参数是1和2相对的buffer的内容是不一样的,这个是在说明文档上看到的,但是具体我该怎么样让系统来传指定的参数呢
sp_daiyq 2014-09-18
  • 打赏
  • 举报
回复
一般能给回调传递参数的时机应该是在setcallback的时候,参考一下
sp_daiyq 2014-09-18
  • 打赏
  • 举报
回复
除非自己调用回调函数,否则怎么告诉系统应该传入指定的参数,我也不清楚了
sp_daiyq 2014-09-17
  • 打赏
  • 举报
回复
引用 15 楼 DoubleKill2014 的回复:
[quote=引用 11 楼 SP_daiyq 的回复:] 设置回调函数后,在回调中直接使用callback函数的参数就可以了啊,回调不是自己调用,系统调用后会给你传参数 void __stdcall RealDataCallBack(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer, DWORD dwBufSize, LDWORD dwUser) { //这里编写你的代码 // 直接使用参数,如果要pBuffer的数据就这样: memcpy(g_pBuffer, pBuffer, dwBufSize); // g_pBuffer为全局的buffer指针 }
那象dwDataType这个形参该如何传入呢?[/quote] 参数是系统传入的,你在函数里直接拿过来用就可以了
DoubleKill2014 2014-09-17
  • 打赏
  • 举报
回复
引用 13 楼 SP_daiyq 的回复:
怎么感觉在给大华打广告
那说MFC是不是就是在给微软打广告了呢?
DoubleKill2014 2014-09-17
  • 打赏
  • 举报
回复
引用 14 楼 mlqxj35674 的回复:
显然你要写这个回调,只是你没写而已
我写了回调了,但是这个回调函数中的buffer对于不同的形参内容是不一样的,是根据dwDataType这个形参来决定内容的,所以我不知道dwDataType这个形参应该怎么传入
DoubleKill2014 2014-09-17
  • 打赏
  • 举报
回复
引用 11 楼 SP_daiyq 的回复:
设置回调函数后,在回调中直接使用callback函数的参数就可以了啊,回调不是自己调用,系统调用后会给你传参数 void __stdcall RealDataCallBack(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer, DWORD dwBufSize, LDWORD dwUser) { //这里编写你的代码 // 直接使用参数,如果要pBuffer的数据就这样: memcpy(g_pBuffer, pBuffer, dwBufSize); // g_pBuffer为全局的buffer指针 }
那象dwDataType这个形参该如何传入呢?
mlqxj35674 2014-09-17
  • 打赏
  • 举报
回复
显然你要写这个回调,只是你没写而已
sp_daiyq 2014-09-17
  • 打赏
  • 举报
回复
怎么感觉在给大华打广告
精分患者 2014-09-17
  • 打赏
  • 举报
回复
也在用大华网络摄像头的人飘过。。。。。
sp_daiyq 2014-09-17
  • 打赏
  • 举报
回复
设置回调函数后,在回调中直接使用callback函数的参数就可以了啊,回调不是自己调用,系统调用后会给你传参数 void __stdcall RealDataCallBack(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer, DWORD dwBufSize, LDWORD dwUser) { //这里编写你的代码 // 直接使用参数,如果要pBuffer的数据就这样: memcpy(g_pBuffer, pBuffer, dwBufSize); // g_pBuffer为全局的buffer指针 }
浩南_哥 2014-09-17
  • 打赏
  • 举报
回复
引用 楼主 DoubleKill2014 的回复:
场景是有一个大华的网络摄像头,通过如下方式来获得视频流 CLIENT_SetRealDataCallBack(m_lRealPlayHandle, RealDataCallBack, (LDWORD)this); 目前已成功的调用,其中的RealDataCallBack是一个回调函数,函数的原型如下: void __stdcall RealDataCallBack(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer, DWORD dwBufSize, LDWORD dwUser) 其中的pbuffer是数据,我想获得这个数据信息该如何做?
你应该是没有看过Demo吧。 CLIENT_SetRealDataCallBack回调出来的就是音视频数据。 你只用将pbuffer,以及dwbufsize这两个参数传入到大华的播放库即可播放音视频。 或者你自己处理这些音视频数据。 网络库接收数据回调的整个流程应该是:

{
	recv摄像机的数据;
	if(帧模式)
	{
		组装成一帧完整的视频数据;
	}
	else
	{
		不组装数据;
	}
	//RealDataCallBack在网络库内容是个函数指针。
	//dwDataType应该标记的就是回调出来的数据是一个完整的帧数据,还是流式数据(需要自己组装)
    RealDataCallBack(lRealHandle,dwDataType,pBuffer,dwBufSize,dwUser);
}
lx624909677 2014-09-17
  • 打赏
  • 举报
回复
引用 7 楼 xihu1364 的回复:
设置回调函数,居然该回调函数不是自己写的,那完全跟你没关系 设置回调函数,就是让你函数中逻辑自己写...
那回调函数如果要写的话直接用那些参数就行了是不
schlafenhamster 2014-09-17
  • 打赏
  • 举报
回复
hook 这个 callback
版主大哥 2014-09-17
  • 打赏
  • 举报
回复
设置回调函数,居然该回调函数不是自己写的,那完全跟你没关系 设置回调函数,就是让你函数中逻辑自己写...
DoubleKill2014 2014-09-17
  • 打赏
  • 举报
回复
引用 5 楼 coollcf 的回复:
void __stdcall RealDataCallBack(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer, DWORD dwBufSize, LDWORD dwUser) { //这里编写你的代码 } 调用CLIENT_SetRealDataCallBack 将 RealDataCallBack传进去.就成了.
回调函数能直接传入参数?那些参数就是我要用的一些数据。。。
coollcf 2014-09-17
  • 打赏
  • 举报
回复
void __stdcall RealDataCallBack(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer, DWORD dwBufSize, LDWORD dwUser) { //这里编写你的代码 } 调用CLIENT_SetRealDataCallBack 将 RealDataCallBack传进去.就成了.
加载更多回复(4)

16,543

社区成员

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

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

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