怎么把DLL提供的回调函数封装在类中
如何把DLL提供的回调函数封装在类中?
------解决方案--------------------
void CALLBACK RealDataCallBack_V30_New(LONG lRealHandle, DWORD dwDataType,
BYTE *pBuffer,DWORD dwBufSize,void* dwUser);
改成
static void CALLBACK RealDataCallBack_V30_New(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer,DWORD dwBufSize,void* dwUser);
仅供参考
- C/C++ code
/////////////////////////////////////////////// //CMyVideo.h头文件 class CMyVideo { //海康预览视频 回调函数原型 typedef void(CALLBACK *fRealDataCallBack_V30) ( LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer, DWORD dwBufSize, void *pUser ); //预览视频 void CALLBACK RealDataCallBack_V30_New(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer,DWORD dwBufSize,void* dwUser); void Start(); //启动回调函数,外部函数通过这个函数来启动回调函数 }; // class CMyVideo ///////////////////////////////////////////////////////////////// //CMyVideo.cpp源文件 //预览视频 void CALLBACK CMyVideo::RealDataCallBack_V30_New(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer,DWORD dwBufSize,void* dwUser) { printf("Enter RealDataCallBack_V30_New\n"); return ; } //外部通过这个接口, 启动回调函数 void CMyVideo::Start() { LONG lUserID; LONG lRealPlayHandle; NET_DVR_CLIENTINFO ClientInfo = {0}; NET_DVR_Init(); lUserID = NET_DVR_Login_V30("DVRIP", 8000, "用户名","密码", NULL); if (lUserID < 0 ) { return FALSE; } ClientInfo.hPlayWnd = NULL; ClientInfo.lChannel = 1; //通道号 ClientInfo.lLinkMode = 0; ClientInfo.sMultiCastIP = NULL; //这里提示错误!!!!!!!!! //提示CMyVideo::RealDataCallBack_V30_New缺少参数列表 //请使用 "&CMyVideo::RealDataCallBack_V30_New",创建指向成员的指针! lRealPlayHandle = NET_DVR_RealPlay_V30(lUserID, &ClientInfo, RealDataCallBack_V30_New, NULL, 0); if (lRealPlayHandle < 0) { return FALSE; } }
------解决方案--------------------
void CALLBACK RealDataCallBack_V30_New(LONG lRealHandle, DWORD dwDataType,
BYTE *pBuffer,DWORD dwBufSize,void* dwUser);
改成
static void CALLBACK RealDataCallBack_V30_New(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer,DWORD dwBufSize,void* dwUser);
仅供参考