![](/img/trans.png)
[英]What is the command line at GetCommandLine and at WinMain API?
[英]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.