Windows
應(yīng)用程序的執(zhí)行
?
Windows
支持兩種類(lèi)型的應(yīng)用程序。一種是基于圖形用戶界面(
GUI
)的應(yīng)用程序,另一種是基于控制臺(tái)用戶界面(
CUI
)的應(yīng)用程序。
(
兩者間可以相互轉(zhuǎn)化
,
沒(méi)有明確的界限
,
就是說(shuō)可以讓
CUI
程序中可以有
Dialog
界面等
,
而
GUI
界面中也可以有
console
來(lái)輸出信息
)
?
對(duì)于一個(gè)應(yīng)用程序:
一
操作系統(tǒng)實(shí)際上先調(diào)用的是C / C + +運(yùn)行期啟動(dòng)函數(shù)。該函數(shù)負(fù)責(zé)對(duì)C / C + +運(yùn)行期庫(kù)進(jìn)行初始化,這樣,就可以調(diào)用m a l l o c 和f r e e 之類(lèi)的函數(shù)。它還能夠確保已經(jīng)聲明的任何全局對(duì)象和靜態(tài)C + +對(duì)象能夠在代碼執(zhí)行以前正確地創(chuàng)建。鏈接程序負(fù)責(zé)在它連接可執(zhí)行文件時(shí)選擇相應(yīng)的C / C + +運(yùn)行期啟動(dòng)函數(shù)。如果設(shè)定了/ S U B S Y S T E M : W I N D O W S 鏈接程序開(kāi)關(guān),那 么該鏈接程序期望找到一個(gè)Wi n M a i n 或w Wi n m a i n函數(shù)。如果這兩個(gè)函數(shù)都不存在,鏈接程序便返回一個(gè)“未轉(zhuǎn)換的外部符號(hào)”的錯(cuò)誤消 息。否則,它可以分別選擇Wi n M a i n C RT S t a r t u p 函數(shù)或w Wi n M a i n C RT S t a r t u p 函數(shù)。
啟動(dòng)函數(shù)的功能歸納如下:
?
檢索指向新進(jìn)程的完整命令行的指針。
?
檢索指向新進(jìn)程的環(huán)境變量的指針。
?
對(duì)
C / C + +
運(yùn)行期的全局變量進(jìn)行初始化。如果包含了
S t d L i b . h
文件,代碼就能訪問(wèn)這些變量。表
4 - 1
列出了這些變量。
?
對(duì)
C
運(yùn)行期內(nèi)存單元分配函數(shù)(
m a l l o c
和
c a l l o c
)和其他低層輸入
/
輸出例程使用的內(nèi)存棧進(jìn)行初始化。
?
為所有全局和靜態(tài)
C + +
類(lèi)對(duì)象調(diào)用構(gòu)造函數(shù)。
二
當(dāng)所有這些初始化操作完成后,
C / C + +
啟動(dòng)函數(shù)就調(diào)用應(yīng)用程序的進(jìn)入點(diǎn)函數(shù)。如果編寫(xiě)了一個(gè)
w Wi n M a i n
函數(shù),它將以下面的形式被調(diào)用
:
GetStartupInfo(&StartupInfo);
int nMainRetVal = wWinMain(GetMjduleHandle(NULL),
NULL, pszCommandLineUnicode,
(StartupInfo.dwFlags & STARTF_USESHOWWINDOW) ?
StartupInfo.wShowWindow:SW_SHOWDEFAULT);
?
三
當(dāng)進(jìn)入點(diǎn)函數(shù)返回時(shí),啟動(dòng)函數(shù)便調(diào)用
C
運(yùn)行期的
e x i t
函數(shù),將返回值(
n M a i n R e t Va l
)傳遞給它。
E x i t
函數(shù)負(fù)責(zé)下面的操作:
?
調(diào)用由
_onexit
函數(shù)的調(diào)用而注冊(cè)的任何函數(shù)。
?
為所有全局的和靜態(tài)的
C++
類(lèi)對(duì)象調(diào)用析構(gòu)函數(shù)。
?
調(diào)用操作系統(tǒng)的
ExitProcess
函數(shù),將
nMainRetVal
傳遞給它。這使得該操作系統(tǒng)能夠撤消進(jìn)程并設(shè)置它的
e x i t
代碼。
?
附錄
:
各種應(yīng)用程序的進(jìn)入點(diǎn)及對(duì)應(yīng)的啟動(dòng)函數(shù)
?
應(yīng)用程序類(lèi)型
|
進(jìn)入點(diǎn)
|
嵌入可執(zhí)行文件的啟動(dòng)函數(shù)
|
需要ANSI字符和字符串的GUI應(yīng)用程序
|
WinMain
|
WinMainCRTStartup
|
需要Unicode字符和字符串的GUI應(yīng)用程序
|
wWinMainw
|
WinMainCRTStartup
|
需要ANSI字符和字符串的CUI應(yīng)用程序
|
main
|
mainCRTStartup
|
需要Unicode字符和字符串的CUI應(yīng)用程序
|
wmain
|
wmainCRTStartup
|
?
?
?