回调函数错误 写回调函数编译时出现此错误 FunctionB' : cannot convert parameter 1 from 'int (char *)' to 'int (__cdecl *)(char *)' 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 网上看的一个用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);} 试了一下,没问题,typedef int(*CallBack)(char *p);//改为typedef int(__stdcall *CallBack)(char *p);// typedef int(__cdecl *CallBack)(char *p);//声明CallBack 类型的函数指针int A(char *p)// 默认的是__cdecl 调用约定不一致。函数定义的调用约定 和函数指针定义的调用约定要一致。要么都为__stdcall,要么都为 __cdecl 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;} “project setting”->"C/C++"->"Code Generation"在“Calling convention”选择一个对的。 VC关于子对话框的问题,求指点 关于图像HBITMAP的问题 VS2008 MFC工程如何改变MDI程序背景颜色?? 子类化不能用?? 看下你们有没有《WINDOWS 网络与通信 程序设计》一书的源代码?麻烦给我一份 怎么获得其他进程中的listview文本 求教:怎样画一个透明窗口, 为什么transparentBlt不能用 Component和Object的本质区别是什么? 项目经理,在夹缝中生存! 示例程序编译出错问题再现:! 如何截获另一窗口的鼠标消息并作出响应 wininet编程的相关问题 如何保证不漏掉任何一个包并且还要不耽搁接收包的时间?
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);
}
typedef int(*CallBack)(char *p);//
改为
typedef int(__stdcall *CallBack)(char *p);//
typedef int(__cdecl *CallBack)(char *p);//声明CallBack 类型的函数指针int A(char *p)// 默认的是__cdecl
{
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;
}