程序的細節

2021-06-06 12:40:12 字數 2236 閱讀 8286

從今天開始,重新學習一些細節性質的東西

一.在vs開發環境中,應用程式的入口點:

_twinmain               winmaincrtstartup

_twinmain               wwinmaincrtstartup

_tmain                     maincrtstartup

_tmain                     wmaincrtstartup

這些啟動函式主要是初始化一些全域性變數

如果要使用這些全域性變數,請包含stdlib.h

二.程序的例項控制代碼,其值大概是其載入記憶體的基址(getmodulehandle)

三.程序的命令列

參考getcommandline和commandlinetoargw

四.程序的環境變數

getenviromentstrings

freeenviromentstrings

使用者登入windows時,系統會建立外殼shell程序,並將一組環境變數與其關聯,系統通過檢查登錄檔中的2個登錄檔項來獲得初始的環境字串

第乙個登錄檔項包含應用於系統的所有環境變數的列表

hkey_local_machine\system\currentcontrolset\control\session manager\enviroment

第二個登錄檔項包含應用於當前登入使用者的所有環境變數列表

hkey_current_user\enviroment

使用者可以在環境變數中新增或刪除這些環境變數

應用程式還可以使用各種登錄檔函式來修改這些登錄檔項,不過,為了使改動對所有的應用程式生效,使用者必須登出並重新登入.有的應用程式(比如資源管理器,控制面板)可以在其主視窗接受到wm_settingchange訊息時,用新的登錄檔項來更新他們的環境變數.例如,假如更新了登錄檔項,並希望應用程式立即更新他們的環境塊,可以進行如下呼叫

sendmessage(hwnd_broadcast,mw_settingchange,0,(lparam)text("enviroment"));

通常子程序會繼承一組環境變數,這些環境變數和父程序的環境變數相同.不過,父程序可以控制哪些環境變數允許子程序繼承,這裡所說的繼承,是指子程序獲得父程序的環境塊的乙個副本,這個副本子程序可以隨意修改而不會影響到父程序.

getenviromentvariable來判斷乙個環境變數是否存在於程序的環境變數塊中,一般這個函式的安全的用法是呼叫2次,第一次呼叫cchvalue中傳入0,那麼函式返回時會返回緩衝區需要的大小,

expandenviromentstrings函式來檢測可替換的環境變數字串(比如%user%)其用法和上面的差不多(詳細的介紹請參考windows核心程式設計  程序的環境變數塊)

最後可以使用setenviromentvariable函式新增乙個變數,刪除乙個變數,或者修改乙個變數

五程序的錯誤模式

seterrormode設定程序的錯誤模式

如果希望子程序不繼承某些父程序的錯誤模式,請在createprocess中指明

六.程序的當前目錄

getcurrentdirectory

例如乙個程序有如下2個環境變數

=c:=c:\bin

=d:=d:\bin

當前程式在c\bin目錄下,而且我們的程式呼叫createfile來開啟d:readme.txt,那麼系統就會查詢環境變數=d:.由於=d:變數是存在的,所以系統將嘗試從d:\bin目錄下開啟這個檔案.如果=d:變數不存在,那麼系統就會試著從d盤的根目錄開啟readme.txt.

可以使用c語言執行庫函式_chdir函式而不是setcurrentdirectory函式來更改設定當前目錄._chdir函式在內部呼叫setcurrentdirectory.但_chdir還會呼叫setenviromentvariable來新增或修改環境變數,從而使不同的驅動器的當前目錄得以保留

如果乙個父程序建立了乙個希望傳給子程序的環境塊,子程序的環境塊就不會自動繼承父程序的當前目錄,相反,子程序的當前目錄預設為每個驅動器的根目錄.如果希望子程序繼承父程序的當前目錄,父程序就必須在生成子程序之前,建立這些驅動器號環境變數,並把它們新增到環境變數塊中,父程序通過呼叫getfullpathname來獲取他的當前目錄

七.系統版本

getversion

getversionex-------osversioninfoex

為了進一步簡化程式設計,windows vista還提供了verifyversioninfo,它能比較主機系統的版本和應用程式要求的版本

c 的細節 一 問號的細節

寫在最前面的話 c 的細節 是我當初學習c 時候,做的一些學習筆記的整理,現在回頭看來這些都是非常淺顯的知識,是c 非常細節的地方,同時也是不能忽略的地方,細節決定成敗 也許有些嚴重。我希望把這些整理出來,可以給初學者乙個參考,也給自己乙個溫故知新的機會。高手就不必花時間來看了。我想你一定寫過下面這...

繼承的細節

什麼時候使用繼承呢?當類與類之間存在著所屬關係時,才具備了繼承的前提。a是b中的一種。a繼承b。比如說 狼是犬科中的一種。英文書中,所屬關係時 is a 注意 不要僅僅為了獲取其他類中的已有成員進行整合。所以判斷所屬關係,可以簡單看,如果繼承後,被繼承的類中的功能,都可以被該子類所具備,那麼繼承成立...

正則的細節

1.正則 檢驗字串的規則 2.正則就是有元字元和修飾符構成 寫在 裡面的都叫元字元 元字元分兩種 1種是有特殊意義的 例如 d 表示數字 2種沒特殊意義 沒有特殊意義就是字元本身 3.特殊意義的元字元 1.轉義字元 轉義後面緊跟的字元的意義 2.d 有意義 數字 無意義 是什麼就是什麼 3.代表除了...