VS2010使用Dll文件搜索順序

1. 首先,我用VS2010創建了一個Dll工程。

編譯連接後,便在Debug目錄下得到了.lib.dll文件。

 

2. 然後,我再創建了一個win32控制檯程序,使用這個dll文件,我使用的方式是裝載時調用,所以我需要.h.lib.dll文件。

2.1 我將這3個文件複製到這個程序的目錄下,然後在程序中就可以直接使用了。

2.2 在運行的過程中,我發現運行時,使用的dll文件不是當前程序目錄下我複製過來的dll文件,而是利用原來Dll工程中Debug下的dll文件。

2.3 然後,我將原創建dll工程下Debug目錄下的dll文件刪除掉後,再執行一下這個控制檯程序,發現此時調用的dll就是我複製到這個程序目錄下的dll文件了。

所以我猜測lib文件中應該有記錄原創建dll的目錄信息,所以在使用lib的時候,程序會從lib文件中記錄的dll路徑去找dll來加載,從而執行;而當發現這個記錄路徑下沒有預想的dll文件後,系統就會從程序當前路徑找相應的dll,於是就找到了我們複製過來的dll文件,於是程序便可以執行了。

lib文件中記錄有原dll文件信息有一個好處,那就是隻要我不改變庫文件接口,而是更新原接口的操作,這樣重新編譯生成新的dll文件,這樣就不需要每次更新庫接口操作後,都要將新的.lib.dll文件複製到需要使用的地方,這樣就很方便。當然這只是在本機調試時比較方便,如果已經發布了dll,那麼每次更新dll,都要給用戶發佈這個新的dll文件。如果dll文件中增加了新的接口函數或改變了接口名稱,那麼就要利用新的.h文件和.lib文件,重新構建生成應用程序,然後將這個升級版的應用程序和新的dll發佈給用戶,進行更新。

相關問題:

. 程序執行時,系統裝在dll文件的路徑順序?lib文件記錄路徑——>程序當前路徑——>??

參考地址:http://msdn.microsoft.com/zh-cn/library/7d83bc18(VS.80).aspx

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

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

2.      當前目錄。

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

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

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

. dll構建程序時,如何處理dll更新升級問題?這個問題比較大、複雜,以後用的時候,慢慢總結吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章