我想调用以下函数中的第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) 
 

解决方案 »

  1.   

    pDataRec fun;
    fun = 函数地址fun( sid, xxxxxxxxx );
      

  2.   

      没看懂哦,那个fun(sid,xxxxxx)是不是实现函数啊
      函数地址是什么啊
      

  3.   

    建议楼主看看 函数指针 就会明白了 《Effective C++》 
      

  4.   

    不是指针函数,是函数指针类型。
    上面的pDataRec即使一个函数指针类型,可以用它来定义一个函数指针变量,将函数指针(入口地址)赋给这个变量后,就通过这个变量来调用函数,用法与直接用函数名称调用相同(用变量名称替代函数名称)。
      

  5.   

    我的理解是
    pDataRec fun; 
    fun = 函数地址//pp函数 ,这个pp函数是做什么的fun( sid, xxxxxxxxx ); 
      

  6.   

    自己顶,
    现在增加了一个函数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)
    '大侠救命啊
      

  7.   

    //一个小例子int mul( int v )
    {
    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;
    }
      

  8.   

    我加了static在pdatarec上就好了,谢谢啊