第四章 程序(1)

2021-09-08 21:05:32 字數 2916 閱讀 9047

程序一a:

程序通常被定義為乙個正在執行的程式的例項,它由兩個部分組成: •

os用來管理程序的核心物件(核心物件也是系統用來存放關於程序的統計資訊的地方)

•位址空間

(它包含所有可執行模組或

dll模組的**和資料

,它還包含動態記憶體分配的空間)

當建立乙個程序時,系統會自動建立它的第乙個執行緒,稱為主線程。然後,該執行緒可以建立其他的執行緒。

b: windows

支援兩種型別的應用程式

基於圖形使用者介面(

gui)的應用程式

; 它能建立視窗,擁有選單,可以通過對話方塊與使用者打交道,並可使用所有的標準「

windows

」元件。

基於控制台使用者介面(

c u i

)的應用程式

; 通常不能用於建立視窗或處理訊息,並且它們不需要圖形使用者介面。命令外殼程式

cmd.exe

是典型的基於

c u i

的應用程式。

c: windows

應用程式必須擁有乙個在應用程式啟動執行時呼叫的進入點函式。可以使用的進

入點函式有4個:

int winapi winmain(hinstance hinstexe, hinstance ,

pstr pszcmdline, int ncmdshow );

int winapi wwinmain(hinstance hinstexe, hinstance ,

pwstr pszcmdline, int ncmdshow );

int _ _ cdecl main(int argc, char *ar**, char *envp);

int _ _ cdecl wmain(int argc, wchar *ar**, wchar *envp);

應用程式型別進入

點嵌入可執行檔案的啟動函式

ansi

字元和字串的

gui應用程式

winmain winmaincrtstartup

unicode

字元和字串的

gui應用程式

wwinmain wwinmaincrtstartup

ansi

字元和字串的

cui應用程式

main maincrtstartup

unicode

字元和字串的

cui應用程式

wmain wmaincrtstartup

作業系統實際上並不呼叫你編寫的進入點函式。它呼叫的是

c/c++

執行期啟動函式。該函式負責對

c/c++

執行期庫進行初始化,這樣,就可以呼叫

malloc

和free

之類的函式它還能夠確保已經宣告的任何全域性物件和靜態

c + +

物件能夠在**執行以前正確地建立。

d: 鏈結程式負責在它連線可執行檔案時選擇相應的

c / c + +

執行期啟動函式。

如果設定了

/subsystem:windows

該鏈結程式查詢

winmain

或wwinmain

函式。如果這兩個函式都不存在,鏈結程式便返回乙個「未轉換的外部符號」的錯誤訊息。否則,它選擇

winmaincrtstartup

函式或wwinmaincrtstartup

函式。

如果設定了

/subsystem : console

該鏈結程式查詢

main

或wmain

函式,並選擇

maincrtstartup

函式或wmaincrtstartup

函式。同樣,如果

main

或wmain

都不存在,那麼鏈結程式返回一條「未轉換外部符號」的訊息。

如果從應用程式中全部刪除

/subsystem

鏈結程式開關。鏈結程式能夠自動確定應用程式應該連線到哪個子系統。當進行鏈結時,鏈結程式要檢視**中存在

4個函式(

winmain

,wwinmain,main,wmain

)中的哪乙個。然後確定可執行程式應該是哪乙個子系統,並且確定可執行程式中應該嵌入哪個

c/c++

啟動函式。

e: 啟動函式的功能如下: •

檢索指向新程序的完整命令列的指標。 •

檢索指向新程序的環境變數的指標。 •

對c/c++

執行期的全域性變數進行初始化。若包含了

stdlib.h

檔案,**就能訪問些變數。 •

對c執行期記憶體單元分配函式(

malloc

和calloc

)和其他低層輸入

/輸出例程使用的記憶體棧進行初始化。 •

為所有全域性和靜態

c + +

類物件呼叫建構函式。

f: 當所有這些初始化操作完成後,

c/c++

啟動函式就呼叫應用程式的進入點函式。當進入點函式返回時,啟動函式便呼叫

c執行期的

e x i t

函式,將返回值(

n m a i n r e t va l

)傳給它。

e x i t

函式負責下面的操作: •

呼叫由_ o n e x i t

函式的呼叫而註冊的任何函式。 •

為所有全域性的和靜態的

c + +

類物件呼叫析構函式。 •

呼叫作業系統的

exitprocess

函式,將

nmainretval

傳遞給它。這使得該作業系統能夠撤消程序並設定它的

e x i t

**。

第四章 程序

程序由兩部分組成 載入到程序位址空間的每個可執行檔案或dll檔案均被賦予乙個獨一無二的示例控制代碼。可執行檔案的示例控制代碼作為winmain的第乙個引數hinstexe來傳遞。載入資源的函式都需要該控制代碼的值。hicon loadicon hinstance hinst,pctstr pszic...

windows核心程式設計 第四章 程序

獲得當前目錄 dword getfullpathname pctstr pszfile,dword cchpath,ptstr pszpath,ptstr ppszfilepart 獲取c盤的當前目錄 tchar szcurdir max path getfullpathname c max pat...

第四章 程序(4)程序的錯誤模式

4 程序的錯誤模式 與每個程序相關聯的是一組標誌,用於告訴系統,程序對嚴重的錯誤應該如何作出反映,這包括磁碟介質故障 未處理的異常情況 檔案查詢失敗和資料沒有對齊等。程序可以告訴系統如何處理每一種錯誤。方法是呼叫 seterrormode 函式 uint seterrormode uint fuer...