如A.DLL里面動態加載B.DLL,相當于把B.DLL打包到A.DLL里, 最后使用時直接呼叫A.DLL.
試了不成功, 原因不知道是不是A.DLL里面加載B.DLL不成功.
以下是別人說有解決辦法, 但我試了還是不行:
方式一 采用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);
uj5u.com熱心網友回復:
完全可以啊,m_hDLL = LoadLibrary(_T("c:\\test\\demo.dll"));
這樣試試
uj5u.com熱心網友回復:
如果指定絕對路徑,不管從哪里呼叫應該都沒問題啊。是不是你的B.dll本身對其他的某些特定dll有依賴造成的。
uj5u.com熱心網友回復:
這是肯定可以的。你可以采用全域加載的方式看看,主要還是看你的編譯和運行情況。
看是不是動態庫加載本身就有問題否則就是你動態加載的時候有問題了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/97264.html
上一篇:結構體陣列函式呼叫賦值問題
