我为什么要__stdcall?

ant*_*009 2 c++

我开始做一些directX编程.我正在使用我从互联网上找到的这个教程.

我只是想知道为什么CALLBACK被定义为_stdcall以及为什么WINAPI也是如此.

我认为__stdcall是在导出将被编译为dll的函数时使用的.

但是,由于WindowProc和WINAPI永远不会被导出,为什么这些函数被声明为__stdcall?

非常感谢任何建议,

// WindowProc function prototype
LRESULT CALLBACK WindowProc(HWND hWnd, 
                            UINT message, 
                            WPARAM wParam, 
                            LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,
                   int nCmdShow)
{

}
Run Code Online (Sandbox Code Playgroud)

dso*_*ano 8

__stdcall引用调用约定,并不一定与导出函数有关.如果您想了解更多信息,请查看Wikipedia关于调用约定的文章.简而言之,编译器需要知道将参数传递给函数,堆栈或寄存器等的位置.


gwe*_*ell 6

__stdcall还有助于减少X86架构上的代码大小.而不是每个调用实例恢复堆栈,堆栈在返回之前仅在函数结束时恢复一次.

从DLL导出也可以__cdecl与声明这种方式一样长.例如:wsprintf()不导出为WINAPI.