windows核心程式設計--windows程式的執行
Windows 應用程式的執行
Windows 支援兩種型別的應用程式。一種是基於圖形使用者介面( GUI )的應用程式,另一種是基於控制檯使用者介面( CUI )的應用程式。 ( 兩者間可以相互轉化 , 沒有明確的界限 , 就是說可以讓 CUI 程式中可以有 Dialog 介面等 , 而 GUI 介面中也可以有 console 來輸出資訊 )
對於一個應用程式:
一 作業系統實際上先呼叫的是C / C + +執行期啟動函式。該函式負責對C / C + +執行期庫進行初始化,這樣,就可以呼叫m a l l o c 和f r e e 之類的函式。它還能夠確保已經宣告的任何全域性物件和靜態C + +物件能夠在程式碼執行以前正確地建立。連結程式負責在它連線可執行檔案時選擇相應的C / C + +執行期啟動函式。如果設定了/ S U B S Y S T E M : W I N D O W S 連結程式開關,那 麼該連結程式期望找到一個Wi n M a i n 或w Wi n m a i n函式。如果這兩個函式都不存在,連結程式便返回一個“未轉換的外部符號”的錯誤消 息。否則,它可以分別選擇Wi n M a i n C RT S t a r t u p 函式或w Wi n M a i n C RT S t a r t u p 函式。
啟動函式的功能歸納如下:
• 檢索指向新程式的完整命令列的指標。
• 檢索指向新程式的環境變數的指標。
• 對 C / C + + 執行期的全域性變數進行初始化。如果包含了 S t d L i b . h 檔案,程式碼就能訪問這些變數。表 4 - 1 列出了這些變數。
• 對 C 執行期記憶體單元分配函式( m a l l o c 和 c a l l o c )和其他低層輸入 / 輸出例程使用的記憶體棧進行初始化。
• 為所有全域性和靜態 C + + 類物件呼叫建構函式。
二 當所有這些初始化操作完成後, C / C + + 啟動函式就呼叫應用程式的進入點函式。如果編寫了一個 w Wi n M a i n 函式,它將以下面的形式被呼叫 :
GetStartupInfo(&StartupInfo); int nMainRetVal = wWinMain(GetMjduleHandle(NULL), NULL, pszCommandLineUnicode, (StartupInfo.dwFlags & STARTF_USESHOWWINDOW) ? StartupInfo.wShowWindow:SW_SHOWDEFAULT);
三
當進入點函式返回時,啟動函式便呼叫 C 執行期的 e x i t 函式,將返回值( n M a i n R e t Va l )傳遞給它。 E x i t 函式負責下面的操作:
• 呼叫由 _onexit 函式的呼叫而註冊的任何函式。
• 為所有全域性的和靜態的 C++ 類物件呼叫解構函式。
• 呼叫作業系統的 ExitProcess 函式,將 nMainRetVal 傳遞給它。這使得該作業系統能夠撤消程式並設定它的 e x i t 程式碼。
附錄 : 各種應用程式的進入點及對應的啟動函式
應用程式型別
|
進入點
|
嵌入可執行檔案的啟動函式
|
需要ANSI字元和字串的GUI應用程式
|
WinMain
|
WinMainCRTStartup
|
需要Unicode字元和字串的GUI應用程式
|
wWinMainw
|
WinMainCRTStartup
|
需要ANSI字元和字串的CUI應用程式
|
main
|
mainCRTStartup
|
需要Unicode字元和字串的CUI應用程式
|
wmain
|
wmainCRTStartup
|
相關文章
- windows核心程式設計--執行緒池Windows程式設計執行緒
- windows核心程式設計--程式Windows程式設計
- Windows核心程式設計_HookWindows程式設計Hook
- windows核心程式設計--核心物件Windows程式設計物件
- Windows核心程式設計_磁碟加密Windows程式設計加密
- windows核心程式設計--纖程Windows程式設計
- windows核心程式設計--DLL基本Windows程式設計
- windows核心程式設計--精華Windows程式設計
- Windows程式設計系列:遠執行緒注入Windows程式設計執行緒
- 《Windows核心程式設計》筆記(一)Windows程式設計筆記
- windows核心程式設計--字符集Windows程式設計
- windows核心程式設計--DLL高階Windows程式設計
- Windows核心程式設計(一)-環境搭建Windows程式設計
- windows核心程式設計--記憶體堆疊Windows程式設計記憶體
- Windows 程式設計簡介從C/C++到Windows程式設計Windows程式設計C++
- windows核心程式設計課程實踐---多執行緒檔案搜尋器(MFC介面)Windows程式設計執行緒
- 多執行緒程式設計的核心思想執行緒程式設計
- windows核心程式設計--記憶體對映檔案Windows程式設計記憶體
- Windows程式設計系列:圖形程式設計基礎Windows程式設計
- Windows sdk程式設計筆記Windows程式設計筆記
- 7-Windows程式設計 -滑鼠Windows程式設計
- 2-Windows程式設計 -UnicodeWindows程式設計Unicode
- windows 服務執行啟動桌面程式Windows
- windows使用bat檔案 執行java程式WindowsBATJava
- 【懷舊】在 64 位 Windows 中執行 16 位 Windows/DOS 程式Windows
- 6-Windows程式設計 -鍵盤Windows程式設計
- 四. 文字程式設計--Windows程式設計課程學習筆記程式設計Windows筆記
- Flink實戰(七) - Time & Windows程式設計Windows程式設計
- 4-Windows程式設計 -文字輸出Windows程式設計
- PHP CGI Windows下遠端程式碼執行漏洞PHPWindows
- crash_for_windows_pkg遠端程式碼執行漏洞Windows
- windows程式設計師開發linux程式的頭一個月Windows程式設計師Linux
- 08 Windows批處理之執行編譯後的程式Windows編譯
- 打造一個好用的 Windows 程式設計環境 2.程式設計環境Windows程式設計
- Windows下繫結執行緒到指定的CPU核心Windows執行緒
- Windows API視窗程式設計 - 空白視窗WindowsAPI程式設計
- Windows CE 程式設計 第四版Windows程式設計
- 5-Windows程式設計 -繪圖基礎Windows程式設計繪圖