最近項目開發中碰到的,沒有找到微軟相關的document,不知道是不是未存檔的,所以在這裡說一下。
情況是這樣的,有一堆dll放在目錄A,另外一個exe程序放在目錄B。目錄A當中dll有些是clr支持的,有些是純win32的。這些win32 dll之間通過隱式調用(.h頭文件&.lib文件)時一切正常,但是如果是通過LoadLibrary或者相關的函數顯式調用則必須指定dll文件的完整路徑,否則盡管它們都在同一個目錄A中,運行時系統也只會去搜索exe所在的目錄B,因為在目錄B中找不到指定文件名的dll將發生系統錯誤。解決方法最簡單的就是利用SetDllDirectory函數動態的添加目錄A到系統搜索目錄中。
另外,經過實驗,.Net 3.5(VS2008Beta2)中ms已經解決了這個問題,將caller dll所在目錄默認已經加入到了callee dll的搜索路徑中,這樣直接就可以通過文件名調用了。