方式一:LoadLibraryEx
转载:http://blog.sina.com.cn/s/blog_62ad1b8101017qub.html
若DLL不在调用方的同一目录下,可以用LoadLibrary(L"DLL绝对路径")加载。但若调用的DLL内部又调用另外一个DLL,此时调用仍会失败。解决办法是用 LoadLibraryEx,通过指定 LOAD_WITH_ALTERED_SEARCH_PATH,让系统DLL搜索顺序从DLL所在目录开始。
LoadLibraryEx("DLL绝对路径", NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
方式二:SetCurrentDir
转载:http://blog.csdn.net/flyayi2006/article/details/5526982
跨目录调用dll,你应该这样:
1、用 GetCurrentDir 保存当前的工作目录
2、用 SetCurrentDir 将当前的工作目录,设置为你的DLL所在的路径,需要使用绝对路径
3、用 LoadLibrary 你的DLL
4、使用 SetCurrentDir 恢复到原来的工作路径
char szCurDir[MAX_PATH] = { 0 };
GetCurrentDirectory(MAX_PATH, szCurDir);
SetCurrentDirectory(strDllDir.c_str());
HINSTANCE hInstance = LoadLibraryEx(strDllPath.c_str(), NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
SetCurrentDirectory(szCurDir);
if (hInstance == NULL)
{
MessageBox("加载DLL失败");
}
else
{
MessageBox("加载DLL成功");
}
转载自原文链接, 如需删除请联系管理员。
原文链接:LoadLibrary加载动态库失败的解决办法,转载请注明来源!