天天看點

DLL中加載其它DLL使用LoadLibrary加載動态庫失敗的解決辦法 - lpx15312

DLL中加載其它DLL使用LoadLibrary加載動态庫失敗的解決辦法

方式一 采用LoadLibraryEx

若DLL不在調用方的同一目錄下,可以用LoadLibrary(L"DLL絕對路徑")加載。但若調用的DLL内部又調用另外一個DLL,此時調用仍會失敗。解決辦法是用LoadLibraryEx:

eg: LoadLibraryEx("DLL絕對路徑", NULL, LOAD_WITH_ALTERED_SEARCH_PATH);

通過指定LOAD_WITH_ALTERED_SEARCH_PATH,讓系統DLL搜尋順序從DLL所在目錄開始。

方式二 采用SetCurrentDir

跨目錄調用dll,你應該這樣

1 用GetCurrentDir儲存目前的工作目錄

2 用SetCurrentDir将目前的工作目錄,設定為你的DLL所在的路徑,需要使用絕對路徑

3 用LoadLibrary你的DLL

4 使用SetCurrentDir恢複到原來的工作路徑

eg:

TCHAR chCurDir[MAX_PATH] = {0}; 

GetCurrentDirectory(MAX_PATH, chCurDir); 

SetCurrentDirectory(_T("c:\\test\\")); 

m_hDLL = LoadLibrary(_T("demo.dll")); 

SetCurrentDirectory(chCurDir);