国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Windows > 正文

Windows用來定位DLL的搜索路徑個人經驗總結

2019-11-28 02:38:36
字體:
來源:轉載
供稿:網友
《程序員面試寶典》一書中寫到,windows搜索dll文件的順序為:(1)內存(2)knowndlls(3)清單與.local(4)應用程序目錄(5)當前工作目錄(6)系統目錄(7)路徑變量

總覺得不太明白,遂查資料確認一下。

查msdn如下:http://msdn.microsoft.com/zh-cn/library/7d83bc18.aspx

通過隱式和顯式鏈接,Windows 首先搜索“已知 DLL”,如 Kernel32.dll 和 User32.dll。Windows 然后按下列順序搜索 DLL:

當前進程的可執行模塊所在的目錄。

當前目錄。

Windows 系統目錄。GetSystemDirectory 函數檢索此目錄的路徑。

Windows 目錄。GetWindowsDirectory 函數檢索此目錄的路徑。

PATH 環境變量中列出的目錄。

隱式鏈接有時稱為靜態加載或加載時動態鏈接。顯式鏈接有時稱為動態加載或運行時動態鏈接。

在隱式鏈接下,使用 DLL 的可執行文件鏈接到該 DLL 的創建者所提供的導入庫(.lib 文件)。使用 DLL 的可執行文件加載時,操作系統加載此 DLL??蛻舳丝蓤绦形募{用 DLL 的導出函數,就好像這些函數包含在可執行文件內一樣。

在顯式鏈接下,使用 DLL 的可執行文件必須進行函數調用以顯式加載和卸載該 DLL,并訪問該 DLL 的導出函數??蛻舳丝蓤绦形募仨毻ㄟ^函數指針調用導出函數。

“已知的 DLL”(非正式名稱)的功能指由內核的模塊加載器進行特殊處理的 DLL(動態鏈接庫)列表。當加載器發現具有指向已知的 DLL 的加載時動態鏈接的程序時,就會立即使用已知的副本,而忽略通常情況下應用于模塊加載的搜索算法。

那上面所寫的內存是什么道理呢?搜索動態庫首先是內存,如果內存中存在就不需要加載,否則需要搜索到后加載到內存中。dll的主要優點也是節省內存和減少交換操作。很多進程可以同時使用一個 DLL,在內存中共享該 DLL 的一個副本。相反,對于每個用靜態鏈接庫生成的應用程序,Windows 必須在內存中加載庫代碼的一個副本。

感覺.local文件像是配置之類的,沒查到相關資料,不清楚。

當前工作目錄 (Current Working Directory), 一般來說,每個進程都有一個與之相關聯的分級文件系統(hierarchical file system)下的目錄,稱之為該進程的當前工作目錄。如果程序剛進入main入口處的時候,當前工作目錄其實就是程序啟動的目錄,但是當前工作目錄是可以通過程序進行設置或者隨著OpenFileDialog、SaveFileDialog等對象所確定的目錄而改變。

應用程序所在的目錄, 該進程從中啟動的目錄,即程序文件自身所在的目錄。和當前工作目錄是不同的。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 广宁县| 德化县| 黄石市| 高州市| 元阳县| 铜川市| 定结县| 大姚县| 汾西县| 扎囊县| 布尔津县| 咸丰县| 沙湾县| 建平县| 衡阳市| 简阳市| 永靖县| 乌鲁木齐市| 双流县| 庐江县| 汪清县| 满洲里市| 嵊州市| 哈尔滨市| 葫芦岛市| 襄垣县| 民乐县| 上饶县| 图木舒克市| 中西区| 防城港市| 石门县| 武宣县| 米泉市| 玉环县| 巢湖市| 黑山县| 辽阳县| 遵义县| 丽江市| 富源县|