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);