日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Windows 用来定位 DLL 的搜索路径

發布時間:2025/3/21 windows 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows 用来定位 DLL 的搜索路径 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

《程序員面試寶典》一書中寫到,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等對象所確定的目錄而改變

    應用程序所在的目錄, 該進程從中啟動的目錄,即程序文件自身所在的目錄。和當前工作目錄是不同的。

    總結

    以上是生活随笔為你收集整理的Windows 用来定位 DLL 的搜索路径的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。