《Windows核心編程》第4章 筆記

來源:互聯網
上載者:User
1、應用程式的進入點
應用程式類型                進入點        嵌入可執行檔的啟動函數
-------------------------------------------------------------------------------
需要ANSI字元和字串的GUI應用程式        WinMain        WinMainCRTStartup
需要Unicode字元和字串的GUI應用程式    wWinMain    wWinMainCRTStartup
需要ANSI字元和字串的CUI應用程式        main        mainCRTStartup
需要Unicode字元和字串的CUI應用程式    wmain        wmainCRTStartup

(VC++)如果不為連結器指定/SUBSYSTEM序開關的時候,連結程式能夠自動確定應用程式應該串連到哪個

子系統:
當進行連結時,連結程式要查看代碼中存在4個函數(WinMain、wWinMain、main或wmain)中的哪一個。
然後確定可執行程式應該是哪一個子系統,並且確定可執行程式中應該嵌入哪個C/C++啟動函數。
這樣提供了最大的靈活性。

2、程式能夠使用的C/C++運行期全域變數(包含stdlib.h)
變數名        類型                說明
-------------------------------------------------------------------------------------------

--
_osver        unsignedint        作業系統的測試版本。例如,Windows2000Beta3是測
                    試版本2031。因此_osver的值是2031
_winmajor    unsignedint        採用十六進位標記法的Windows主要版本。對於Windows
                    2000來說,它的值是5
_winminor    unsignedint        採用十六進位標記法的Windows次要版本。對於Windows
                    2000來說,它的值是0
_winver        unsignedint        (_winmajor<<8)+_winminor在命令列上傳遞的參數號
__argc        unsignedint
__argv        char**            帶有指向ANSI/Unicode字串的指標的__argc大小的數組
__wargv        wchar_t**        每個數組項均指向一個命令列參數
_environ    char**            指向ANSI/Unicode字串的指標的數組。每個數組項指向
                    一個環境字串
_wenviron    wchar_t**
_pgmptr        char*            正在啟動並執行程式的ANSI/Unicode全路徑和名字
_wpgmptrwchar_t*

3、DLL的記憶體基地址
調用GetModuleHandle並傳遞NULL值,就會返回進程的地址空間中可執行檔的基地址。因此,
即使通過包含在DLL中的代碼來調用(NULL),返回的值也是可執行檔的基地址,而不是
DLL檔案的基地址。
[註:]可以通過DllMain函數的第一個參數,要獲得DLL檔案的基地址。

3、關於CreateProcess
CreateProcess函數的lpCommandLine參數類型為LPTSTR。
這意味著CreateProcess期望你將傳遞一個非常量字串的地址。從內部來講,CreateProcess實際上要修

改你傳遞
給它的命令列字串。不過,在CreateProcess返回之前,它將該字串恢複為它的原始形式。
這個問題很重要,因為如果命令列字串不包含在檔案映象的唯讀部分中,就會出現違規訪問的問題(盡

管某些情況下可能不會出現問題)。
比如下面的代碼:
CreateProcess(NULL, TEXT("NOTEPAD"),...);
因為VC++在預設情況下是把常量字串"NOTEPAD"放入唯讀記憶體的。
(參看VC的/Gf /GF編譯開關)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.