我想调用以下函数中的第3个参数(回调函数)来获得其中的数据来录像,
CLIENT_API HSESSION __stdcall HIKS_CreatePlayer(IHikClientAdviseSink* pSink, void* pWndSiteHandle, pDataRec pRecFunc, pMsgBack pMsgFunc=0,int TransMethod=0);//创建Player
就是那个precfunc,他的定义如下typedef int (__stdcall *pDataRec)(int sid, int iusrdata, int idatatype, char* pdata, int ilen);
比如我想得到sid的值该怎么引用哩,默认的creatplayer(this,hWnd,NULL,NULL,1)
CLIENT_API HSESSION __stdcall HIKS_CreatePlayer(IHikClientAdviseSink* pSink, void* pWndSiteHandle, pDataRec pRecFunc, pMsgBack pMsgFunc=0,int TransMethod=0);//创建Player
就是那个precfunc,他的定义如下typedef int (__stdcall *pDataRec)(int sid, int iusrdata, int idatatype, char* pdata, int ilen);
比如我想得到sid的值该怎么引用哩,默认的creatplayer(this,hWnd,NULL,NULL,1)
fun = 函数地址fun( sid, xxxxxxxxx );
函数地址是什么啊
上面的pDataRec即使一个函数指针类型,可以用它来定义一个函数指针变量,将函数指针(入口地址)赋给这个变量后,就通过这个变量来调用函数,用法与直接用函数名称调用相同(用变量名称替代函数名称)。
pDataRec fun;
fun = 函数地址//pp函数 ,这个pp函数是做什么的fun( sid, xxxxxxxxx );
现在增加了一个函数pdatarecop
实现如下
int CClientdemoDlg::pdatarecop(int sid, int iusrdata, int idatatype, char* pdata, int ilen)
{
int pp=sid;
int xxx=idatatype;
char eee[100];
CopyMemory(eee,pdata,100);
}
在onbutton1
中调用 HIKS_CreatePlayer之前加入:pDataRec fp=pdatarecop;
然后这么用: m_hSession = HIKS_CreatePlayer(this,hWndl5,(*fp)(0, 0, 1,pdata1,100));//DoRecord//hWnd//this
结果报错:: error C2440: 'initializing' : cannot convert from '' to 'int (__stdcall *)(int,int,int,char *,int)'
None of the functions with this name in scope match the target type
error C2664: 'HIKS_CreatePlayer' : cannot convert parameter 3 from 'int' to 'int (__stdcall *)(int,int,int,char *,int)
'大侠救命啊
{
return v * v;
}int add( int v )
{
return v + v;
}typedef int( *pfun )( int );int main( void )
{
pfun p;
p = ( pfun )mul;
printf( "%d\r\n", p( 3 ) );
p = ( pfun )add;
printf( "%d\r\n", p( 3 ) );
return 0;
}