DLL中加载其它DLL使用LoadLibrary加载动态库失败的解决办法
来源:互联网 发布:autodesk软件下载 编辑:程序博客网 时间:2024/05/16 08:36
方式一 采用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);
防止DLL劫持,来之百度百科
四 DLL安全编程,避免产生DLL挟持问题
(1) 调用LoadLibrary, LoadLibraryEx, CreateProcess的,或者 的ShellExecute 等涉及到模块加载的函数的时候,指定DLL加载的完整路径,貌似应该有API可以获取当前程序运行的目录的
(2)考虑使用 的DLL重定向 或 Manifests文件 ,以确保您的应用程序使用正确的DLL。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs
(3)确保DLL安全搜索模式被激活。未使用安全搜索设置的话,第二加载项就是当前目录。
HKLM\System\CurrentControlSet\Control\Session Manager \ SafeDllSearchMode
(4)从搜索列表中取消当前目录,可以通过调用SetDllDirectory 参数设置为一个空字符串
0 0
- DLL中加载其它DLL使用LoadLibrary加载动态库失败的解决办法
- LoadLibrary加载动态库失败的解决办法
- LoadLibrary加载动态库失败的解决办法
- 使用LoadLibrary加载DLL
- LoadLibrary加载dll失败的问题
- 使用LoadLibrary动态加载DLL并使用其中的类
- loadlibrary加载三方dll失败问题。
- dll动态加载,LoadLibrary和LoadLibraryEx的区别
- 在xp下加载正常的dll,在win7下loadlibrary失败,返回错误值998(ERROR_NOACCESS)的解决办法
- dll的动态加载
- Loadlibrary 加载指定动态库失败的问题解决
- 动态库dll加载
- dll编写3之LoadLibrary动态加载
- c#编写ARP欺骗,无法加载 DLL“wpcap”: 找不到指定的模块。loadlibrary("wpcap.dll")失败-找不到指定的模块
- 如何卸载其它进程中加载的指定DLL
- VC中动态加载DLL的方法
- LoadLibrary 加载 dll 使用GetLastError返回14001原因
- C#中实现动态加载dll库
- 使用X-UA-Compatible来设置IE浏览器兼容模式
- linux命令详解之useradd命令使用方法
- dbUtil的简单使用
- java I/O底层
- Mac OS X Yosemite的JavaSE
- DLL中加载其它DLL使用LoadLibrary加载动态库失败的解决办法
- 快排改进
- 动态规划5-矩阵连乘问题
- 无法打开头文件、无法解析的外部符号
- as3corelib的常见使用
- Redis安全
- 多用户下git使用ssh管理配置
- 动态规划6-背包问题+记忆递归
- android 判断应用程序是系统程序还是用户程序