LoadLibrary載入動態庫失敗的解決辦法
阿新 • • 發佈:2019-01-22
方式一 採用LoadLibraryEx
若DLL不在呼叫方的同一目錄下,可以用LoadLibrary(L"DLL絕對路徑")載入。但若呼叫的DLL內部又呼叫另外一個DLL,此時呼叫仍會失敗。解決辦法是用LoadLibraryEx:
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恢復到原來的工作路徑
示例
TCHAR chCurDir[MAX_PATH] = {0};
GetCurrentDirectory(MAX_PATH, chCurDir);
SetCurrentDirectory(_T("E:\\test\\"));
m_hDLL = LoadLibrary(_T("MyTest.dll"));
SetCurrentDirectory(chCurDir);