最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

C++基礎(chǔ)語(yǔ)法梳理:Windows 的動(dòng)態(tài)鏈接庫(kù)

2021-11-01 17:46 作者:C語(yǔ)言編程__Plus  | 我要投稿


Windows 應(yīng)用程序入口函數(shù)

GUI(Graphical User Interface)應(yīng)用,鏈接器選項(xiàng):/SUBSYSTEM:WINDOWS

CUI(Console User Interface)應(yīng)用,鏈接器選項(xiàng):/SUBSYSTEM:CONSOLE

_tWinMain 與 _tmain 函數(shù)聲明


Windows 的動(dòng)態(tài)鏈接庫(kù)(Dynamic-Link Library)

部分知識(shí)點(diǎn)來(lái)自《Windows 核心編程(第五版)》

用處

(1)擴(kuò)展了應(yīng)用程序的特性

(2)簡(jiǎn)化了項(xiàng)目管理

(3)有助于節(jié)省內(nèi)存

(4)促進(jìn)了資源的共享

(5)促進(jìn)了本地化

(6)有助于解決平臺(tái)間的差異

(7)可以用于特殊目的

注意

(1)創(chuàng)建 DLL,事實(shí)上是在創(chuàng)建可供一個(gè)可執(zhí)行模塊調(diào)用的函數(shù)

(2)當(dāng)一個(gè)模塊提供一個(gè)內(nèi)存分配函數(shù)(malloc、new)的時(shí)候,它必須同時(shí)提供另一個(gè)內(nèi)存釋放函數(shù)(free、delete)

(3)在使用 C 和 C++ 混編的時(shí)候,要使用 extern "C" 修飾符

(4)一個(gè) DLL 可以導(dǎo)出函數(shù)、變量(避免導(dǎo)出)、C++ 類(lèi)(導(dǎo)出導(dǎo)入需要同編譯器,否則避免導(dǎo)出)

(5)DLL 模塊:cpp 文件中的 __declspec(dllexport) 寫(xiě)在 include 頭文件之前

(6)調(diào)用 DLL 的可執(zhí)行模塊:cpp 文件的 __declspec(dllimport) 之前不應(yīng)該定義 MYLIBAPI

加載 Windows 程序的搜索順序

1、包含可執(zhí)行文件的目錄

2、Windows 的系統(tǒng)目錄,可以通過(guò) GetSystemDirectory 得到

3、16 位的系統(tǒng)目錄,即 Windows 目錄中的 System 子目錄

4、Windows 目錄,可以通過(guò) GetWindowsDirectory 得到

5、進(jìn)程的當(dāng)前目錄

6、PATH 環(huán)境變量中所列出的目錄

DLL 入口函數(shù)

DllMain 函數(shù)

載入卸載庫(kù)

LoadLibrary、LoadLibraryExA、LoadPackagedLibrary、FreeLibrary、FreeLibraryAndExitThread 函數(shù)聲明

顯示地鏈接到導(dǎo)出符號(hào)

GetProcAddress 函數(shù)聲明

DumpBin.exe 查看 DLL 信息

在?VS 的開(kāi)發(fā)人員命令提示符?使用?DumpBin.exe?可查看 DLL 庫(kù)的導(dǎo)出段(導(dǎo)出的變量、函數(shù)、類(lèi)名的符號(hào))、相對(duì)虛擬地址(RVA,relative virtual address)。如:

LoadLibrary 與 FreeLibrary 流程圖

LoadLibrary 與 FreeLibrary 流程圖

LoadLibrary


FreeLibrary


DLL 庫(kù)的編寫(xiě)(導(dǎo)出一個(gè) DLL 模塊)

DLL 庫(kù)的編寫(xiě)(導(dǎo)出一個(gè) DLL 模塊) DLL 頭文件

DLL 源文件

DLL 庫(kù)的使用(運(yùn)行時(shí)動(dòng)態(tài)鏈接 DLL)

DLL 庫(kù)的使用(運(yùn)行時(shí)動(dòng)態(tài)鏈接 DLL)

運(yùn)行庫(kù)(Runtime Library)

典型程序運(yùn)行步驟

(1)操作系統(tǒng)創(chuàng)建進(jìn)程,把控制權(quán)交給程序的入口(往往是運(yùn)行庫(kù)中的某個(gè)入口函數(shù))

(2)入口函數(shù)對(duì)運(yùn)行庫(kù)和程序運(yùn)行環(huán)境進(jìn)行初始化(包括堆、I/O、線(xiàn)程、全局變量構(gòu)造等等)。

(3)入口函數(shù)初始化后,調(diào)用 main 函數(shù),正式開(kāi)始執(zhí)行程序主體部分。

(4)main 函數(shù)執(zhí)行完畢后,返回到入口函數(shù)進(jìn)行清理工作(包括全局變量析構(gòu)、堆銷(xiāo)毀、關(guān)閉I/O等),然后進(jìn)行系統(tǒng)調(diào)用結(jié)束進(jìn)程。

一個(gè)程序的 I/O 指代程序與外界的交互,包括文件、管程、網(wǎng)絡(luò)、命令行、信號(hào)等。更廣義地講,I/O 指代操作系統(tǒng)理解為 “文件” 的事物。

glibc 入口

_start -> __libc_start_main -> exit -> _exit

其中?main(argc, argv, __environ)?函數(shù)在?__libc_start_main?里執(zhí)行。

MSVC CRT 入口

int mainCRTStartup(void)

執(zhí)行如下操作:

(1)初始化和 OS 版本有關(guān)的全局變量。

(2)初始化堆。

(3)初始化 I/O。

(4)獲取命令行參數(shù)和環(huán)境變量。

(5)初始化 C 庫(kù)的一些數(shù)據(jù)。

(6)調(diào)用 main 并記錄返回值。

(7)檢查錯(cuò)誤并將 main 的返回值返回。

C 語(yǔ)言運(yùn)行庫(kù)(CRT)

大致包含如下功能:

啟動(dòng)與退出:包括入口函數(shù)及入口函數(shù)所依賴(lài)的其他函數(shù)等。

標(biāo)準(zhǔn)函數(shù):有 C 語(yǔ)言標(biāo)準(zhǔn)規(guī)定的C語(yǔ)言標(biāo)準(zhǔn)庫(kù)所擁有的函數(shù)實(shí)現(xiàn)。

I/O:I/O 功能的封裝和實(shí)現(xiàn)。

堆:堆的封裝和實(shí)現(xiàn)。

語(yǔ)言實(shí)現(xiàn):語(yǔ)言中一些特殊功能的實(shí)現(xiàn)。

調(diào)試:實(shí)現(xiàn)調(diào)試功能的代碼。

C語(yǔ)言標(biāo)準(zhǔn)庫(kù)(ANSI C)

包含:

標(biāo)準(zhǔn)輸入輸出(stdio.h)

文件操作(stdio.h)

字符操作(ctype.h)

字符串操作(string.h)

數(shù)學(xué)函數(shù)(math.h)

資源管理(stdlib.h)

格式轉(zhuǎn)換(stdlib.h)

時(shí)間/日期(time.h)

斷言(assert.h)

各種類(lèi)型上的常數(shù)(limits.h & float.h)

變長(zhǎng)參數(shù)(stdarg.h)

非局部跳轉(zhuǎn)(setjmp.h)

今天的分享就到這里了,大家要好好學(xué)C++喲~

寫(xiě)在最后:對(duì)于準(zhǔn)備學(xué)習(xí)C/C++編程的小伙伴,如果你想更好的提升你的編程核心能力(內(nèi)功)不妨從現(xiàn)在開(kāi)始!

微信公眾號(hào):C語(yǔ)言編程學(xué)習(xí)基地

C語(yǔ)言零基礎(chǔ)入門(mén)教程(83集全)

整理分享(多年學(xué)習(xí)的源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門(mén)教程)

歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長(zhǎng)比自己琢磨更快哦!



C++基礎(chǔ)語(yǔ)法梳理:Windows 的動(dòng)態(tài)鏈接庫(kù)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
棋牌| 论坛| 秭归县| 荥阳市| 田东县| 临湘市| 文登市| 九台市| 满洲里市| 白沙| 海原县| 盱眙县| 夏津县| 临江市| 乳源| 孟津县| 汾阳市| 贵定县| 清丰县| 柳河县| 聊城市| 天门市| 宝坻区| 冕宁县| 葫芦岛市| 宣城市| 凤庆县| 黑龙江省| 云霄县| 双城市| 启东市| 米易县| 游戏| 贵南县| 静乐县| 巨野县| 水城县| 信宜市| 铜川市| 花莲市| 屯留县|