關鍵字:#pragma comment linker /subsystem:windows /subsystem:console轉自:http://blog.csdn.net/lostangels/article/details/2027642
作業系統裝載應用程式後,做完初始化工作就轉到程式的進入點執行。程式的預設進入點實際上是由串連程式設定的,不同的連接器選擇的入口函數也不盡相同。在VC++下,連接器對控制台程式設定的入口函數是 mainCRTStartup,mainCRTStartup 再調用你自己編寫的 main 函數;對圖形化使用者介面(GUI)程式設定的入口函數是 WinMainCRTStartup,WinMainCRTStartup 調用你自己寫的 WinMain 函數。而具體設定哪個進入點是由連接器的“/subsystem:”選項參數確定的,它告訴作業系統如何運行編譯產生的.EXE檔案。可以指定四種方式“CONSOLE|WINDOWS|NATIVE|POSIX”。
如果這個選項參數的值為“WINDOWS”,則表示該應用程式運行時不需要控制台,有關連接器參數選項的詳細說明請參考 MSDN 庫。
以下四種組合,可以實現console和windows模式的混合,可以達到不彈出DOS視窗的效果,也可以達到在Windows程式中向控制台輸出printf資訊了。
#pragma comment( linker, "/subsystem:windows /entry:WinMainCRTStartup" )
#pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" )
#pragma comment( linker, "/subsystem:console /entry:mainCRTStartup" )
#pragma comment( linker, "/subsystem:console /entry:WinMainCRTStartup" )
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
// ... ...
}
int main(void)
{
// ... ...
}
----------------------------------
註:在我的Win7 + VS2010環境下,無法實現不彈出console那個黑框而直接蹦出MessageBox。