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核心程式設計--精華Windows程式設計
- Windows核心程式設計_HookWindows程式設計Hook
- windows核心程式設計--核心物件Windows程式設計物件
- windows核心程式設計--纖程Windows程式設計
- windows核心程式設計--DLL基本Windows程式設計
- Windows核心程式設計_磁碟加密Windows程式設計加密
- windows核心程式設計--字符集Windows程式設計
- windows核心程式設計--DLL高階Windows程式設計
- 《Windows核心程式設計》筆記(一)Windows程式設計筆記
- Windows核心程式設計(一)-環境搭建Windows程式設計
- 《Windows核心程式設計》---又是記憶體Windows程式設計記憶體
- windows核心程式設計--記憶體堆疊Windows程式設計記憶體
- windows核心程式設計讀後感(待續)Windows程式設計
- Windows Shell 程式設計Windows程式設計
- windows核心程式設計課程實踐---多執行緒檔案搜尋器(MFC介面)Windows程式設計執行緒
- 可以在Windows的"執行"中直接執行的程式Windows
- 多執行緒程式設計的核心思想執行緒程式設計
- Windows 程式設計簡介從C/C++到Windows程式設計Windows程式設計C++
- windows核心程式設計--記憶體對映檔案Windows程式設計記憶體
- windows核心程式設計---錯誤報告與應用程式恢復Windows程式設計
- windows程式設計簡介Windows程式設計
- Windows Phone 7程式設計Windows程式設計
- 7-Windows程式設計 -滑鼠Windows程式設計
- Windows sdk程式設計筆記Windows程式設計筆記
- Windows 程式設計常用函式Windows程式設計函式
- Windows Phone程式設計回顧Windows程式設計
- 淺談Windows API程式設計WindowsAPI程式設計
- Windows程式設計啟示錄Windows程式設計
- Windows程式設計系列:遠執行緒注入Windows程式設計執行緒
- windows 服務執行啟動桌面程式Windows
- windows使用bat檔案 執行java程式WindowsBATJava
- 【懷舊】在 64 位 Windows 中執行 16 位 Windows/DOS 程式Windows
- Windows核心程式管理器解析Windows
- 6-Windows程式設計 -鍵盤Windows程式設計
- 2-Windows程式設計 -UnicodeWindows程式設計Unicode
- c# windows程式設計基礎C#Windows程式設計