應(yīng)用程序的啟動(dòng)過(guò)程

應(yīng)用程序的啟動(dòng)過(guò)程

ID:41008230

大?。?2.00 KB

頁(yè)數(shù):5頁(yè)

時(shí)間:2019-08-13

應(yīng)用程序的啟動(dòng)過(guò)程_第1頁(yè)
應(yīng)用程序的啟動(dòng)過(guò)程_第2頁(yè)
應(yīng)用程序的啟動(dòng)過(guò)程_第3頁(yè)
應(yīng)用程序的啟動(dòng)過(guò)程_第4頁(yè)
應(yīng)用程序的啟動(dòng)過(guò)程_第5頁(yè)
資源描述:

《應(yīng)用程序的啟動(dòng)過(guò)程》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。

1、應(yīng)用程序都會(huì)有一個(gè)入口函數(shù),它在程序運(yùn)行時(shí)才被調(diào)用。因此,創(chuàng)建控制應(yīng)用程序時(shí),此入口函數(shù)將會(huì)是main。??intmain(intargc,char*argv[]);操作系統(tǒng)實(shí)際上不是真調(diào)用main函數(shù),而是去調(diào)用了C/C++運(yùn)行期啟動(dòng)函數(shù),此函數(shù)會(huì)初始化C/C++運(yùn)行期庫(kù)。因此,在程序中可以調(diào)用malloc和free之類(lèi)函數(shù)。???如果,我們?cè)诳刂婆_(tái)上省去了main函數(shù),那么連接器將返回一個(gè)"unresolvedexternalsymbol"錯(cuò)誤。???Win32程序啟動(dòng)過(guò)程,實(shí)際上是線程去調(diào)用一個(gè)CreateProcess函數(shù)

2、的時(shí)候,系統(tǒng)會(huì)創(chuàng)建一個(gè)進(jìn)程內(nèi)核對(duì)象,其使用計(jì)數(shù)被初始化為1.此進(jìn)程內(nèi)核對(duì)象不是進(jìn)程本身,僅僅是一個(gè)系統(tǒng)用來(lái)管理這個(gè)進(jìn)程的小的數(shù)據(jù)結(jié)構(gòu)。系統(tǒng)然后為新的進(jìn)程創(chuàng)建一個(gè)虛擬地址空間,加載應(yīng)用程序運(yùn)行時(shí)所需要的代碼和數(shù)據(jù)。???系統(tǒng)接著會(huì)為新進(jìn)程創(chuàng)建一個(gè)主線程,這個(gè)主線程通過(guò)執(zhí)行C/C++運(yùn)行期啟動(dòng)代碼開(kāi)始運(yùn)行,C/C++運(yùn)行期啟動(dòng)代碼又會(huì)調(diào)用main函數(shù)。如果系統(tǒng)能成功創(chuàng)建新的進(jìn)程和進(jìn)程的主線程,CreateProcess函數(shù)會(huì)返回TRUE,否則返回FALSE。????一般將創(chuàng)建進(jìn)程稱為父進(jìn)程,被創(chuàng)建的進(jìn)程稱為子進(jìn)程。系統(tǒng)在創(chuàng)建新的進(jìn)程時(shí)

3、會(huì)為新進(jìn)程指定一個(gè)STARTUPINFO類(lèi)型的變量,這個(gè)結(jié)構(gòu)保護(hù)了父進(jìn)程傳遞給子進(jìn)程的一些顯示信息。對(duì)圖形界面應(yīng)用程序來(lái)說(shuō),這些信息將影響新進(jìn)程中主線程的主窗口顯示:對(duì)控制臺(tái)應(yīng)用程序來(lái)說(shuō),如果有一個(gè)新的控制窗口被創(chuàng)建的話,這些信息將影響這個(gè)控制臺(tái)窗口。STARTUPINFO結(jié)構(gòu)定義如下。??????typedefstruct{?????????????DWORD???cb;???????????????//本結(jié)構(gòu)的長(zhǎng)度,總是應(yīng)該被設(shè)為sizeof(STARTUPINFO)?????????????LPSTR???????lpRes

4、erved;??//保留(Reserve)字段,即程序不使用這個(gè)參數(shù)?????????????LPSTR???????lpDesktop;???//指定桌面名稱?????????????LPSTR???????lpTitle;??????????//控制臺(tái)應(yīng)用程序使用,指定控制臺(tái)窗口標(biāo)題?????????????DWORD???dwX;?????????????//?????????????DWORD???dwY;?????????????//?????????????DWORD???dwXSize;???????????????

5、?????DWORD???dwYSize;?????????????DWORD???dwXCountChars;??//控制臺(tái)程序使用,指定控制臺(tái)窗口的行數(shù)?????????????DWORD???dwYCountChars;?????????????DWORD???dwFillAttribute;?????//控制臺(tái)程序使用,指定控制臺(tái)窗口的背景色?????????????DWORD???dwFlags;??????????//標(biāo)志。它的值決定了STARTUPINFO結(jié)構(gòu)中哪些成員的值是有效的。?????????????WORD

6、??????wShowWindow;??//窗口的顯示方式?????????????WORD??????cbReserved2;?????????????LPBYTE??????lpReserved2;?????????????HANDLE????hStdInput;??????//控制臺(tái)程序使用,幾個(gè)標(biāo)準(zhǔn)句柄?????????????HANDLE????hStdOutput;?????????????HANDLE????hStdError;???????}STARTUPINFO,*LPSTARTUPINFO;?????????一

7、個(gè)進(jìn)程可以調(diào)用GetStartupInfo函數(shù)來(lái)取得父進(jìn)程創(chuàng)建自己時(shí)使用的STARTUPINFO結(jié)構(gòu)。??事實(shí)上,Windows系統(tǒng)就是通過(guò)調(diào)用這個(gè)函數(shù)來(lái)取得當(dāng)前進(jìn)程的創(chuàng)建信息,以便對(duì)新進(jìn)程中主窗口的屬性設(shè)置默認(rèn)值。??函數(shù)定義如下。??VOIDGetStrtupInfo(LPSTARTUPINFOlpStartupInfo);???//取得當(dāng)前進(jìn)程被創(chuàng)建時(shí)指定的STARTUPINFO結(jié)構(gòu)。???定義一個(gè)STARTUPINFO結(jié)構(gòu)的對(duì)象以后,總要在使用此對(duì)象之前將對(duì)象的cb成員初始化為STARTUPINFO結(jié)構(gòu)大小。???如下所示

8、:???STARTUPINFOsi=[sizeof(si)];?????//將cb成員初始化為sizeof(si),其他成員初始化為0???::GetStrartupInfo(&si);????初始化cb成員這一步是必須的。因?yàn)殡S著WIndows版

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。