簡體   English   中英

這個WinMain()聲明中發生了什么?

[英]What is happening in this WinMain() declaration?

我正在學習關於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);
}

這編譯並運行良好。 我的問題與int WINAPI WinMain(...)的WinMain()聲明有關。 當我讀它時,WinMain函數(方法?)返回一個整數。 但是WINAPI溝通的是什么?

顯然,我正在寫Windows API。 WINAPI以某種方式標記該函數,以便程序使用Windows API來執行它嗎?

WINAPI是一個預處理器定義,定義為__stdcall ,一個調用約定; 當函數在其名稱之前有__stdcall時,它是編譯器的一個指令,使函數使用該調用約定。 這是你的函數和調用你的函數的函數同意使用stdcall調用約定並且調用正確執行。

這是必要的,因為編譯器的默認調用約定可能是也可能不是stdcall,因此您必須明確告訴編譯器使其成為該函數的那種方式。 Windows API的設計者主要出於兼容性原因和stdcall調用約定的普遍性,決定使所有函數調用都使用stdcall調用約定。

此外,您可以在同一程序中使用具有不同調用約定的函數。 因此,例如, WinMain必須是stdcall,但程序的其他功能不是; 他們可以使用編譯器默認值。

調用約定是一種方法,用於執行諸如參數應該在堆棧上的順序,在函數返回時應該從堆棧中刪除它們,在何處放置返回值以及其他內容。 不同的調用約定以不同的方式實現。 最重要的是,調用者和被調用者都遵循相同的調用約定是非常重要的。 有關調用約定的更多信息,請參閱Wikipedia文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM