分类: C/C++
2008-11-20 15:36:57
事情的起因,开始于想使用回调函数。突然想说说什么叫经验,经验就是你遇到的和见到到多了,并有了自己的解决办法或思路,这种针对问题的妥善处理就叫经验了。o(∩_∩)o...,我可不是专家,更不是学者,下不了完美绕口的定义。这就叫自己的理论,废话不说了,还是继续此次的记录吧。最初在EVC使用让回调函数指针直接指向被调函数并编译时并没有发现问题,而是在VS中遇到了下面的错误提示:
于是就引出了今天的话题,关于__cdecl和__stdcall。后来通过在被调函数前加上了__stdcall才算解决了,于是有了这样的话:在VS中默认是__cdecl的调用规范,而回调函数声明CALLBACK使用的是__stdcall调用规范。所以为了同一自己使用的调用规范,那么就需要在被调函数前加上__stdcall了。我想EVC默认的是使用__stdcall吧,或者可能编译器有个地方可以设定本工程使用的调用规范吧。没有细究,你来考究一下吧^_^。下面还是用两个文件来稍微说明来如何正确使用CALLBACK吧(注意,我下面列举的只是其中之一的方法哟)。
第一个文件:
- /*a.cpp源文件*/
- //调用该回调函数,就这样做:
- int aclen =7; //这个参数只是做做样子啦
- m_Eastar(aclen);
第二个文件:
- /*b.cpp源文件*/
- a.m_Eastar = OnFun;
- //让回调函数指向本文件的函数OnFun(int len)
- void __stdcall B::OnFun(int len)
- {
- // TODO: 在此处添加代码吧
- }
轮廓就是这个样子了。时间过的真快,记录点日志也挺花费功夫的嘛 ^_^