首页 > 解决方案 > “LRESULT CALLBACK WinProc”和“LRESULT WINAPI WinProc”之间的区别

问题描述

我正在学习使用 DirectX9 创建游戏,我发现定义 WinProc 的不同版本:

LRESULT WINAPI WinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
LRESULT CALLBACK WinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)

我不知道它们之间有什么不同,我应该使用什么版本?谢了兄弟。

标签: c++winapi

解决方案


 #define CALLBACK   __stdcall

 #define WINAPI     __stdcall

从两者的宏观定义来看,它们是相同的。

MSDN

CALLBACK、WINAPI 和 APIENTRY 都用于定义具有 __stdcall 调用约定的函数。Windows API 中的大多数函数都是使用 WINAPI 声明的。您可能希望将 CALLBACK 用于您实现的回调函数,以帮助将函数识别为回调函数。

什么是 Windows 调用约定?

来自MSDN

名称的修饰方式取决于语言以及编译器如何被指示使函数可用,即调用约定。DLL 使用的 Windows 的标准进程间调用约定称为 WinAPI 约定。它在 Windows 头文件中定义为 WINAPI,而后者又使用 Win32 声明符 __stdcall 定义。

也就是说WINAPI、CALLBACK和_stdcall在Windows平台上是一样的。

您可以使用 CALLBACK 或 WINAPI。


推荐阅读