在 C/s模式的项目 设计中 定义了以下一个 函数,到底这是一个 什么函数呢 ??平时我们定义的时候 都是int 函数名()然后 后面加一个函数体,这个函数的定义怎么这么奇怪啊 ??这个函数在 什么 时候被调用 啊??int __cdecl StreamDirectReadCallback(ULONG channelNum,void *DataBuf,DWORD Length,int frameType,void *context)
{;;;;这个奇怪的 函数
}在onIndialog中函数调用了RegisterStreamDirectReadCallback(::StreamDirectReadCallback,this)这句话!在 这个里面的::StreamDirectReadCallback是指上面的那个 函数吗?如果是那为 什么要加"::"????
还有就是在if (!MP4_ServerStart(&videoinfo))
{
MessageBox("error","error",MB_OK);
}
执行到 if的时候往下step into调试就进入int __cdecl StreamDirectReadCallback(ULONG channelNum,void *DataBuf,DWORD Length,int frameType,void *context)
{
}这个函数体中这个是 为 什么啊 ?没有 任何调用啊 !!
下面是SDK中相关函数的介绍RegisterStreamDirectReadCallback
函 数: int __stdcall RegisterStreamDirectReadCallback
(STREAM_DIRECT_READ_CALLBACK StreamDirectReadCallback,void *Context)
参 数: STREAM_DIRECT_READ_CALLBACK StreamDirectReadCallback;编码数据流
直接读取回调函数
void* Context;设备上下文
返回值: 成功返回0;失败返回错误号
说 明: DS4000HC系列板卡新增的一种数据流读取方式,当启动数据捕获后,
StreamDirectReadCallback会提供数据流的地址、长度、帧类型等,供用户程序直接处理。
编码数据流直接读取回调函数
typedef int (*STREAM_DIRECT_READ_CALLBACK)(ULONG channelNumber,
void *DataBuf,DWORD Length,int FrameType,void *context)
ULONG channelNumber;通道号
void* DataBuf;缓冲区地址
DWORD Length;缓冲区长度
int FrameType;缓冲区数据帧类型
void* context;设备上下文
BOOL __stdcall MP4_ServerStart(PSERVER_VIDEOINFO videoinfo);
启动服务端
返回TRUE表示成功,返回FALSE表示失败

解决方案 »

  1.   

    int __cdecl StreamDirectReadCallback 定义成了一个回调函数 由系统来调用的;__cdecl 回调函数大多用这个
    RegisterStreamDirectReadCallback(::StreamDirectReadCallback,this)
    里面::是域作用符,说明StreamDirectReadCallback是全局的,不是类的成员
    回调函数的调用不定在什么时候,所以step into有时不会进去
      

  2.   

    这个叫回调函数,到百度上找一下它的说明吧,这个是window的一个重要特点