我正在学习关于C++和windows api的编程.我的第一个"Hello Windows API"程序只显示一个MessageBox().但是,我有疑问,我正在阅读的这本书并没有解释.
首先,这是程序:
// HelloWin32 Program
#include<Windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
MessageBox(NULL, "This gets displayed in the message.", "This is the title bar of the message dialog.", MB_OK | MB_ICONEXCLAMATION);
}
Run Code Online (Sandbox Code Playgroud)
这编译并运行良好.我的问题与WinMain()声明有关int WINAPI WinMain(...).当我读它时,WinMain函数(方法?)返回一个整数.但WINAPI沟通是什么?
显然,我正在写Windows API.难道WINAPI不知何故标志,以便程序使用Windows API来执行它什么功能?
WINAPI是一个预处理器定义,定义为__stdcall一个调用约定; 当函数__stdcall在其名称之前有,它是编译器的一个指令,使函数使用该调用约定.这是你的函数和调用你的函数的函数都同意使用stdcall调用约定并且调用正确执行.
这是必要的,因为编译器的默认调用约定可能是也可能不是stdcall,因此您必须明确告诉编译器使其成为该函数的那种方式.Windows API的设计者主要出于兼容性原因和stdcall调用约定的普遍性,决定使所有函数调用都使用stdcall调用约定.
此外,您可以在同一程序中使用具有不同调用约定的函数.因此,例如,WinMain必须是stdcall,但程序的其他功能不是; 他们可以使用编译器默认值.
一个调用约定是做这样的事情,其中的参数应该去堆栈,谁应该从堆栈中删除它们当函数返回时,在那里把返回值,和其他东西上的顺序的方法.不同的调用约定以不同的方式实现.最重要的是,调用者和被调用者都遵循相同的调用约定是非常重要的.有关调用约定的更多信息,请参阅Wikipedia文章.
| 归档时间: |
|
| 查看次数: |
3680 次 |
| 最近记录: |