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调用约定,当在可用的内存很少的情况下从调用中删除指令时很重要.