hur.cn - 华软网

 热门搜索

回调函数错误

  作者:未知    来源:网络    更新时间:2010/8/2
写回调函数编译时出现此错误  
FunctionB' : cannot convert parameter 1 from 'int (char *)' to 'int (__cdecl *)(char *)'
---华软 网友回答---
回调函数是stdcall
---华软网友回复---
网上看的一个用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);

---华软网友回复---
引用 1 楼 schlafenhamster 的回复:
回调函数是stdcall


我把代码贴出来了,再帮看看,谢了
---华软网友回复---
试了一下,没问题,
typedef int(*CallBack)(char *p);//
改为
typedef int(__stdcall *CallBack)(char *p);//
---华软网友回复---
C++">

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

int A(char *p)// 默认的是__cdecl

---华软网友回复---
引用 4 楼 stonewater 的回复:
试了一下,没问题,
typedef int(*CallBack)(char *p);//
改为
typedef int(__stdcall *CallBack)(char *p);//

不好意思,,可是我编译的时候还是会出现那个问题啊。。
---华软网友回复---
调用约定不一致。

函数定义的调用约定 和函数指针定义的调用约定要一致。要么都为__stdcall,要么都为 __cdecl
---华软网友回复---
引用 5 楼 schlafenhamster 的回复:
C++">

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

int A(char *p)// 默认的是__cdecl

我也是这样改的,可是我这里还是错啊。
---华软网友回复---
rebuild all
---华软网友回复---
VC6上试了一下你的代码,没有问题,VS2008下将char*改成TCHAR*,然后AfxMessageBox做一下修改也没有问题
C++">
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”选择一个对的。
---华软网友回复---
引用 10 楼 visualeleven 的回复:
VC6上试了一下你的代码,没有问题,VS2008下将char*改成TCHAR*,然后AfxMessageBox做一下修改也没有问题

C/C++ code

typedef int(*CallBack)(char *p);//ÉùÃ÷CallBack ÀàÐ͵ĺ¯ÊýÖ¸Õë

int A(char *p)
{
    AfxMessageBox("A");
    AfxM……


怎么你们的都没有问题啊,我的怎么有啊。难道我的我的vc6.0的问题?
---华软网友回复---
引用 11 楼 schlafenhamster 的回复:
“project setting”->"C/C++"->"Code Generation"在“Calling convention”选择一个对的。

还是错啊
---华软网友回复---
  class="deleted_message"> 该回复于2010-08-03 17:00:17被版主删除
---华软网友回复---
他这个是类的问题..他用的类..换句话说他用的C++.而不是C      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。