写回调函数编译时出现此错误  
FunctionB' : cannot convert parameter 1 from 'int (char *)' to 'int (__cdecl *)(char *)'

解决方案 »

  1.   

    网上看的一个用VC++ 6.0写的回调函数的例子,但是在编译后出现错误
    B' : cannot convert parameter 1 from 'int (char *)' to 'int (__cdecl *)(char *)'
    typedef int(*CallBack)(char *p);//声明CallBack 类型的函数指针
    int A(char *p)
    {
    AfxMessageBox("A");
    AfxMessageBox(p);
    return 0;
    }
    int B(CallBack lpCall,char *p)
    {
    AfxMessageBox("B");
    AfxMessageBox(p);
    lpCall(p);    //借助回调完成的功能,也就是A函数来处理的.
    return 0;
    }
    void hello::OnButton9()
    {
    char *p="hello!";
    B(A,p);
      

  2.   

    试了一下,没问题,
    typedef int(*CallBack)(char *p);//
    改为
    typedef int(__stdcall *CallBack)(char *p);//
      

  3.   


    typedef int(__cdecl *CallBack)(char *p);//声明CallBack 类型的函数指针int A(char *p)// 默认的是__cdecl
      

  4.   

    调用约定不一致。函数定义的调用约定 和函数指针定义的调用约定要一致。要么都为__stdcall,要么都为 __cdecl
      

  5.   

    VC6上试了一下你的代码,没有问题,VS2008下将char*改成TCHAR*,然后AfxMessageBox做一下修改也没有问题typedef int(*CallBack)(char *p);//ÉùÃ÷CallBack ÀàÐ͵ĺ¯ÊýÖ¸Õëint A(char *p)
    {
    AfxMessageBox("A");
    AfxMessageBox(p);
    return 0;
    }
    int B(CallBack lpCall,char *p)
    {
    AfxMessageBox("B");
    AfxMessageBox(p);
    lpCall(p); //½èÖú»Øµ÷Íê³ÉµÄ¹¦ÄÜ,Ò²¾ÍÊÇAº¯ÊýÀ´´¦ÀíµÄ.
    return 0;
    }
    void OnButton9()
    {
    char *p="hello!";
    B(A,p);
    } int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
    {
    OnButton9();
    return 0;
    }
      

  6.   

    “project setting”->"C/C++"->"Code Generation"在“Calling convention”选择一个对的。