一个很难理解的C函数谁来帮帮忙啊?

来源:百度知道 编辑:UC知道 时间:2024/09/22 01:33:39
第一次见这么复杂的函数,实在找不到头绪了,那位能帮忙解决下这个问题?小弟在此拜谢!!

NET_DVR_API BOOL NET_DVR_SetDVRMessCallBack(BOOL ( *fMessCallBack)(int lCommand,char *sDVRIP,char *pBuf,UINT32 dwBufLen));

功能:设置接收硬盘录像机(DVR)消息的回调函数(以IP 地址区分设备)
软件包中所有需主动上传的信息(异常除外)都通过 NET_DVR_SetDVRMessCallBack()函数设置的回调函数上传
fMessCallBack:消息回调函数,像硬盘录像机主动发起的请求;以及通过报警上传通道收到的报警信息,都通过此函数回调。
lCommand:消息的类型,定义如下:
#define COMM_ALARM 0x1100 (报警信息)
异常类型
#define EXCEPTION_EXCHANGE 0x8000 (用户交互时异常)
#define EXCEPTION_AUDIOEXCHANGE 0x8001 (语音对讲异常)
#define EXCEPTION_ALARM 0x8002 (报警异常)
#define EXCEPTION_PREVIEW 0x8003 (网络预览异常)
#define EXCEPTION_SERIAL 0x8004 (透明通道异常)
sDVRIP:服务器的IP地址
pBuf:存放信息的缓冲区,不同的类型分别指向不同的结构
dwBufLen:缓冲区的大小
返回值:TRUE表示成功,FALSE表示失败

我就不明白BOOL ( *fMessCallBack)这是个什么东西?函数的参数怎么这么用?BOOL ( *fMessCallBack)(int lCommand,char *sDVRIP,char *pBuf,UINT32 dwBufLen)
参数一般不就(A,B,C,...)这种形式的吗?这个函数怎么里边这么复杂是啥意思?
它在程序中的应用

这是接收DVR异常的一个函数:
NET_DVR_SetExceptionCallBack_V30(NULL,NULL,OnDVRExceptionCallback,NULL);

//OnDVRExceptionCallback是一个函数指针,下面是函数的具体内容
#ifdef WIN32 void CALLBACK OnDVRExceptionCallback(DWORD dwType, LONG lUserID, LONG lHandle, void *pUser)
#else void CALLBACK OnDVRExceptionCallback(unsigned int dwType, int lUserID, int lHandle, void *pUser)
#endif
{
OnHikDVRMessageCB(dwType, lUserID, NULL, 0); //异常的处理
}

//OnHikDVRMessageCB函数具体内容
int OnHikDVRMessageCB( LONG lCommand, LONG lUserID, char *pBuf, DWORD dwBufLen )
{
if (lCommand>=EXCEPTION_EXCHANGE)
{
LOG::INF("设备[%u] catch [%x]exception!\n", lUserID, lCommand);
}
switch(lCommand) { //异常
case EXCEPTION_EXCHANGE:/*网络断开需要重新登录*/ {
NET_DVR_SetReconnect();
} break;
case EXCEPTION_AUDIOEXCHANGE:/*语音对讲时网络异常*/