2011-09-13 62 views
5

如果我這樣做LoadLibrary("%windir%\\system32\\ole32.dll")這是否意味着Windows將只從「c:\ windows \ system32 \ ole32.dll」加載? C中的LoadLibrary()是否理解環境變量?LoadLibrary解析環境變量如%windir%

+1

沒有兩次,它不擴展環境變量,也不會理解字符串中的轉義碼。而一個32位程序將在64位操作系統上受到文件系統重定向,而從c:\ windows \ syswow64加載。 –

回答

6

正如Serge所說並經過仔細測試,LoadLibrary不會在路徑中進行環境變量替換。

但是,在Windows API中有一個函數用於替換字符串中的環境變量:ExpandEnvironmentStrings()。您可以在致電LoadLibrary()之前在您的路徑上執行所需的替換。

4

docs for LoadLibrary明確指出:

如果字符串指定了一個完整路徑,該功能模塊只搜索 路徑。

也就是說,他們沒有提到支持環境變量替代。我非常懷疑他們支持環境變量替換:這是一個shell特性,而不是內核API。

順便說一句,這意味着LoadLibrary()將認爲%windir%\blah.dll作爲相對路徑,因爲它不以驅動器號或UNC路徑開頭。因此它會查看整個系列的目錄,尋找一個名稱爲%windir%的子目錄,它不太可能找到!

我給了它一個快速測試:它證實了我的意見。錯誤= 126:指定的模塊找不到

+0

是的,它不擴展環境變量。 –