系統(tǒng)之家 - 系統(tǒng)光盤下載網(wǎng)站!

當(dāng)前位置:系統(tǒng)之家 > 系統(tǒng)教程 > 關(guān)于進(jìn)程和Windows應(yīng)用程序的介紹(2)

關(guān)于進(jìn)程和Windows應(yīng)用程序的介紹(2)

時間:2013-04-22 10:24:00 作者:木木 來源:系統(tǒng)之家 1. 掃描二維碼隨時看資訊 2. 請使用手機瀏覽器訪問: https://m.xitongzhijia.net/xtjc/20121120/18577.html 手機查看 評論

  操作系統(tǒng)實際并不調(diào)用我們所寫的入口點函數(shù)。相反,它會調(diào)用由C/C++運行庫實現(xiàn)并鏈接時使用-entry:命令選項來設(shè)置

  的一個C/C++運行時啟動函數(shù)。該函數(shù)將初始化C/C++運行庫,使我們能調(diào)用malloc和free之類函數(shù)。

  應(yīng)用程序類型和相應(yīng)的入口點函數(shù)表

應(yīng)用程序類型和相應(yīng)的入口點函數(shù)表

  當(dāng)鏈接器正確選擇了C/C++運行庫啟動函數(shù)后,鏈接器會根據(jù)指定的鏈接器開關(guān),尋找相應(yīng)的入口點函數(shù),否則會返回

  "unresolved external symbol"(無法解析的外部符號)錯誤。 不然一般會根據(jù)情況分別選擇 嵌入可執(zhí)行文件的啟動函數(shù)。

  當(dāng)然我們也可以從自己的項目中移除/SUBSYSTEM鏈接器開關(guān),讓程序自動判斷應(yīng)該使用哪個子系統(tǒng)。

  去啟動入口點函數(shù) (WinMain, wWinMain, main, or wmain) 。

  VisualC++有自帶C運行庫的源碼?梢栽趀rtex.c文件中找到 這4個啟動入口點函數(shù)源代碼。這些啟動函數(shù)的用途下面簡單說下:

  1.獲取指向心進(jìn)程的完整命令行的一個指針。

  2.獲取指向新進(jìn)程的壞境變量的一個指針。

  3.初始化C/C++運行庫的全局變量。如果包含了StdLib.h,我們的代碼就可以訪問這些變量。

  4.初始化C運行庫內(nèi)存分配函數(shù)malloc和calloc和其他底層I/O歷程使用的堆。

  5.調(diào)用所有全局和靜態(tài)C++類對象的構(gòu)造函數(shù)。

  C/C++啟動函數(shù)會調(diào)用應(yīng)用程序的入口點函數(shù)。比如我們寫了一個_tWinMain函數(shù),且定義了_UNICODE

  其調(diào)用過程如下:

  GetStartupInfo(&StartupInfo);

  int nMainRetVal = wWinMain((HINSTANCE)&__ImageBase, NULL, pszCommandLineUnicode,

  (StartupInfo.dwFlags & STARTF_USESHOWWINDOW)

  ? StartupInfo.wShowWindow : SW_SHOWDEFAULT);

  如果沒有定義_UNICODE,其調(diào)用過程將如下所示:

  GetStartupInfo(&StartupInfo);

  int nMainRetVal = WinMain((HINSTANCE)&__ImageBase, NULL, pszCommandLineAnsi,

  (StartupInfo.dwFlags & STARTF_USESHOWWINDOW)

  ? StartupInfo.wShowWindow : SW_SHOWDEFAULT);

  注意_ImageBase是一個鏈接器定義的偽變量,可執(zhí)行文件都被映射到應(yīng)用程序內(nèi)存中的什么位置以后討論。

  現(xiàn)在 我們?nèi)绻麑懥艘粋_main函數(shù),可以定義?_UNICODE其調(diào)用過程如下:

  int nMainRetVal = wmain(argc, argv, envp);

  沒定義_UNICODE,調(diào)用過程如下:

  int nMainRetVal = main(argc, argv, envp);

  另外注意用Visual Studio 生成的應(yīng)用程序CUI是沒有入口點的第3個參數(shù)

  int _tmain(int argc, TCHAR* argv[]);

  要自己添加成

  int _tmain(int argc, TCHAR* argv[], TCHAR* env[])

  env參數(shù)指向一個參數(shù),所有環(huán)境變量和值 都用等號(=)分隔。

  為安全起見 Microsoft 并不贊成使用所有這些變量,因為使用了這些變量代碼可能會在C運行庫初始化這些變量之前開始執(zhí)行,因此我們應(yīng)該直接調(diào)用對于的WindowsAPI函數(shù)。

  進(jìn)程是操作系統(tǒng)中最基本、重要的概念。是多道程序系統(tǒng)出現(xiàn)后,為了刻畫系統(tǒng)內(nèi)部出現(xiàn)的動態(tài)情況,描述系統(tǒng)內(nèi)部各道程序的活動規(guī)律引進(jìn)的一個概念,所有多道程序設(shè)計操作系統(tǒng)都建立在進(jìn)程的基礎(chǔ)上。而應(yīng)用程序是指為了完成某項或某幾項特定任務(wù)而被開發(fā)運行于操作系統(tǒng)之上的計算機程序。

發(fā)表評論

0

沒有更多評論了

評論就這些咯,讓大家也知道你的獨特見解

立即評論

以上留言僅代表用戶個人觀點,不代表系統(tǒng)之家立場

其他版本軟件

人氣教程排行

XP系統(tǒng)推薦

掃碼關(guān)注
掃碼關(guān)注

掃碼關(guān)注 官方交流群 軟件收錄