1. 程式人生 > >VS2010使用Dll的順序

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更新升級問題?這個問題比較大、複雜,以後用的時候,慢慢總結吧。