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就是我複製到這個程式目錄下的
所以我猜測lib檔案中應該有記錄原建立dll的目錄資訊,所以在使用lib的時候,程式會從lib檔案中記錄的dll路徑去找dll來載入,從而執行;而當發現這個記錄路徑下沒有預想的dll檔案後,系統就會從程式當前路徑找相應的dll,於是就找到了我們複製過來的dll檔案,於是程式便可以執行了。
lib檔案中記錄有原dll檔案資訊有一個好處,那就是隻要我不改變庫檔案介面,而是更新原介面的操作,這樣重新編譯生成新的dll檔案,這樣就不需要每次更新庫介面操作後,都要將新的.lib和.dll檔案複製到需要使用的地方,這樣就很方便。當然這只是在本機除錯時比較方便,如果已經發布了dll,那麼每次更新
相關問題:
一. 程式執行時,系統裝在dll檔案的路徑順序?lib檔案記錄路徑——>程式當前路徑——>??
參考地址:http://msdn.microsoft.com/zh-cn/library/7d83bc18(VS.80).aspx
通過隱式和顯式連結,Windows 首先搜尋“已知 DLL”,如 Kernel32.dll 和 User32.dll。Windows
1. 當前程序的可執行模組所在的目錄。
2. 當前目錄。
3. Windows 系統目錄。GetSystemDirectory函式檢索此目錄的路徑。
4. Windows 目錄。GetWindowsDirectory 函式檢索此目錄的路徑。
5. PATH 環境變數中列出的目錄。
二. 用dll構建程式時,如何處理dll更新升級問題?這個問題比較大、複雜,以後用的時候,慢慢總結吧。