1

MFC VC++中,setTimer函数是使用CALLBACK过程设置的。从我读到的链接

标有 __stdcall 的函数使用如此命名的标准调用约定,因为所有 Win32 API 函数(除了少数接受可变参数的函数)都使用它。

由此,这就是我所理解的,所有 VC++ MFC 函数都__stdcall用作它们的调用转换。

CALLBACK定义如下......

 #define CALLBACK __stdcall

我读过的内容: 在函数前面加上 CALLBACK 用于强调特定函数将在必要时自动调用(例如在这种setTimer情况下或onClick在 javascript 中的情况下),

我的疑问是,在 MFC VC++ 中,所有函数(除了少数接受可变参数的函数)都具有 __stdcall 的默认调用约定。CALLBACK因此,在具有或WINAPIPASCAL具有相同效果的函数之前或不之前?

4

1 回答 1

0

电脑绝对有必要吗?这取决于上下文。当您不匹配调用约定时,您可能会很幸运,因为堆栈上的数据类型恰好符合 API 的要求,或者当您的代码在 x64等不同的架构上运行并且每次都崩溃时,它可能会惨遭失败。

维护程序员绝对有必要吗?是的。你知道,可怜的人将不得不弄清楚你的非标准约定和聪明的“优化”。总有一天,那个可怜的人可能就是你。

当你试图颠覆 API 时,编译器对你大喊大叫是有原因的。

于 2012-03-07T19:53:14.653 回答