CALLBACK关键字在Win-32 C++应用程序中的含义是什么?

Jon*_*hop 6 c++ windows winapi visual-c++

Win-32 C++应用程序中的某些函数调用已应用CALLBACK关键字,如本例所示(取自此MSDN页面):

BOOL CALLBACK DeleteItemProc(HWND hwndDlg, UINT message,
                             WPARAM wParam, LPARAM lParam) 
{
    // ... code here ...
}
Run Code Online (Sandbox Code Playgroud)

我通过Visual Studio看到CALLBACK关键字已定义(使用#define)为__stdcall.该__stdcall文档并不能使它更清晰(至少对我来说)它做什么.

简而言之,使用CALLBACK对我有什么用?这是绝对必要的,还是可以将该声明保留下来?

Han*_*ant 19

这是必需的,__ stdcall不是大多数编译器的默认调用约定.__cdecl是正常的默认值.如果调用约定错误将使您的程序以难以诊断的方式行为不端.参数值是错误的,堆栈变得不平衡.

这只是32位代码中的一个问题,64位代码只有一个调用约定.另外一个人将被立即禁止到南大西洋的一个小岛上终生禁止.__stdcall是一个历史性的事故,它开始于DOS和16位Windows中的pascal调用约定,当在可用的内存很少的情况下从调用中删除指令时很重要.

  • +1为南大西洋岛屿的想法.:-) (2认同)