1. 程式人生 > >LoadLibrary載入動態庫失敗的解決辦法

LoadLibrary載入動態庫失敗的解決辦法

方式一 採用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);