2012-12-25 38 views
0

我的代碼使用LoadLibraryA(「someDLL.dll」);它開始搜索文件someDLL.dll的路徑是什麼?另一個問題:LoadLibraryA函數是否區分大小寫?我的意思是如果我有SomeDLL.dll它不會加載它?LoadLibrary A在哪裏查找文件?

+0

如果我沒有記錯,在線文檔會談論很多關於搜索策略。我會看那裏。就區分大小寫而言,如果在文檔中沒有明確說明,那麼測試自己應該是​​一件容易的事情...... – tmpearce

回答

2

LoadlLibrary文章指定備註搜索順序:

如果lpFileName的對象不包括路徑和存在具有相同基名和擴展名, 返回的句柄功能不止一個 加載的模塊首先加載的模塊。

如果在lpFileName參數 中未指定文件擴展名,則附加缺省庫擴展名.dll。但是,文件名 字符串可以包含尾隨點字符(。),以指示 模塊名稱沒有擴展名。如果未指定路徑,則功能 將搜索加載的模塊,其基本名稱與要加載的模塊的基本名稱 相匹配。如果名稱匹配,則加載成功。 否則,該功能將搜索該文件。 [...]

有關DLL搜索順序的更多信息,請參閱Dynamic-Link Library Search Order

文件名不區分大小寫,所以NTFS和FAT文件名是。這是fundamental rule不承擔大小寫:

命名約定

以下基本規則使應用程序能夠創建和處理有效的名稱爲文件和目錄,無論文件系統:[...]

不要假定區分大小寫。

2

MSDN庫文章Dynamic-Link Library Search Order指定當SafeDllSearchMode啓用桌面應用程序的搜索順序,這是自Windows XP SP2默認:

  1. 的目錄從其中加載應用程序。
  2. 系統目錄。使用GetSystemDirectory函數獲取此目錄的路徑。
  3. 16位系統目錄。沒有獲得該目錄路徑的函數,但它被搜索。
  4. Windows目錄。使用GetWindowsDirectory函數獲取此目錄的路徑。
  5. 當前目錄。
  6. PATH環境變量中列出的目錄。請注意,這不包括App Paths註冊表項指定的每個應用程序路徑。計算DLL搜索路徑時不使用App Paths鍵。
相關問題