我想自己定义一个带参数的回调函数,在用另外一个函数调用,但不知道参数应该在哪里付值,谁能给出一个简单的例子,或者相关的连接,下面是我写的程序,编译通不过,为什么?
typedef void CALLBACK (*pAAA)(int);
//这里为什么出错,如果没有CALLBACK就可以通过?
void CALLBACK AAA(int a)
{
std::cout<<"ok"<<std::endl<<a<<std::endl;
}
void CallAAA(pAAA aaa)
{
aaa(34);
}
void main()
{
pAAA bbb = &AAA;
CallAAA(bbb);
}

解决方案 »

  1.   

    以下摘抄MSDN的
    LRESULT CallWindowProc(
      WNDPROC lpPrevWndFunc,  // pointer to previous procedure
      HWND hWnd,              // handle to window
      UINT Msg,               // message
      WPARAM wParam,          // first message parameter
      LPARAM lParam           // second message parameter
    );#ifdef STRICT 
      WNDPROC MyWindowProcedure 
    #else 
      FARPROC MyWindowProcedure 
    #endif 
    ... 
        lResult = CallWindowProc(MyWindowProcedure, ...) ; 你不妨查查CallWindowProc、WindowProc、DefWindowProc吧,如果用CallWindowProc的话就要把函数定义成WindowProc一样的格式了。不过一般的函数无需定义成CALLBACK 吧:
    CALLBACK Use in place of FAR PASCAL in application callback routines such as window procedures and dialog procedures.
      

  2.   

    函数指针定义错误,写成:typedef void (CALLBACK *pAAA)(int);
      

  3.   

    a_kun(狂人日记)那个语法问题解决了,可是调用回掉函数的函数,我还是不会写,难道只能由系统来调用吗?
      

  4.   

    你干什么要调用回调函数?Win32API里面的回调函数所要求的参数你一般给不出来的,要是你能给出来,就按照你上面的代码写就可以了,否则是没有办法的(也可以自己编造几个数据给你的回调函数,只要这样不会有问题)。