程序一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...