可能重复:
C中的"CALLBACK"声明有什么作用?
WindowProc()函数的原型就是这个
LRESULT CALLBACK WindowProc(HWND hWnd,UINT message , WPARAM wParan, LPARAM lParam);
Run Code Online (Sandbox Code Playgroud)
但是我从来没有遇到过CALLBACK关键字,我只知道回调函数是你将指针传递给另一个函数的函数,那么这个CALLBACK到底是什么?它做了什么?
它的#defined为__stdcall,因为这就是Win32 API对回调函数的假设.这是一个调用约定 - 它描述了函数调用在低级别上的排列方式 - 如何在CPU堆栈上排列参数等等.关于预期堆栈布局(即约定)的假设必须在调用者和被调用者之间匹配,否则可能会产生各种有趣的后果.
从历史上看,在Intel CPU上有多种约定; 如果计算非Microsoft编译器,则会更多.确保你的回调是__stdcall是一个很好的做法.在某些情况下,根据编译器和设置,__ stdcall是默认的调用约定(即您可以安全地省略CALLBACK),但并非总是如此.
回到Win16,CALLBACK被定义为far pascal.这甚至不太可能成为用户功能的默认设置,尤其是在C程序中.假设回调被认为具有Pascal调用约定这一事实是一个历史人工制品.
| 归档时间: |
|
| 查看次数: |
9497 次 |
| 最近记录: |