如何解决加载动态链接库DLL失败,返回0,GetLastError返回错误码126
2014-11-07 10:32
1071 查看
通常情况下使用LoadLibrary加载DLL都可以成功,但是当被加载的DLL内部依赖其他DLL无法被找到时,该函数会返回126(ERROR_MOD_NOT_FOUND)错误。
解决办法有2种:
1)使用depends查看DLL的依赖项,查看有警告的即为不存在的,这时候可以通过查找下载等方式补齐
2)基于第1种方法的结果,假如发现所有DLL的依赖项都存在,那很有可能就是加载DLL的程序和DLL不在同一个目录,且DLL以及相关的依赖项没有在system32目录下或环境变量PATH中,这时候要么改变DLL路径要么改变程序路径。
当然很多时候也可以使用代码解决,如在加载DLL前,增加设置当前目录为DLL所在目录的代码即可,delphi代码如下:
function LoadLib(sDLL: string):HModule;
var
szCurDir: string;
begin
szCurDir := System.SysUtils.GetCurrentDir();
try
//假设依赖的DLL和要加载的DLL同一个目录,同时又与EXE不在同一个目录,其他情况可自行修改代码
System.SysUtils.SetCurrentDir(ExtractFilePath(sDLL));
Result := LoadLibrary(PChar(sDLL));
finally
System.SysUtils.SetCurrentDir(szCurDir);
end;
end;
解决办法有2种:
1)使用depends查看DLL的依赖项,查看有警告的即为不存在的,这时候可以通过查找下载等方式补齐
2)基于第1种方法的结果,假如发现所有DLL的依赖项都存在,那很有可能就是加载DLL的程序和DLL不在同一个目录,且DLL以及相关的依赖项没有在system32目录下或环境变量PATH中,这时候要么改变DLL路径要么改变程序路径。
当然很多时候也可以使用代码解决,如在加载DLL前,增加设置当前目录为DLL所在目录的代码即可,delphi代码如下:
function LoadLib(sDLL: string):HModule;
var
szCurDir: string;
begin
szCurDir := System.SysUtils.GetCurrentDir();
try
//假设依赖的DLL和要加载的DLL同一个目录,同时又与EXE不在同一个目录,其他情况可自行修改代码
System.SysUtils.SetCurrentDir(ExtractFilePath(sDLL));
Result := LoadLibrary(PChar(sDLL));
finally
System.SysUtils.SetCurrentDir(szCurDir);
end;
end;
相关文章推荐
- dll之loadbitmap失败 getlasterror返回1813 1814的解决
- [转]在xp下加载正常的dll,在win7下loadlibrary失败,返回错误值998(ERROR_NOACCESS)的解决办法
- 如何知道GetLastError()返回的错误信息
- LoadLibrary失败,getlasterror返回126的心得
- LoadLIbrary 失败GetLasterror 返回127 126
- dll加载失败,返回126错误
- CreateBitmapIndirect() GetLastError() 返回 错误的参数 创建失败原因
- LoadLibrary 加载 dll 使用GetLastError返回14001原因
- 在xp下加载正常的dll,在win7下loadlibrary失败,返回错误值998(ERROR_NOACCESS)的解决办法
- 如何知道GetLastError()返回的错误代码的意义?
- 如何将GetLastError()返回的错误代码转换成字符串
- WIN7上UpdateLayeredWindow执行失败,getlasterror返回307的问题解决方法
- C/C++错误分析errno,perror,strerror和GetLastError()函数返回的错误代码的意义
- CreateCompatibleBitmap的GetLastError返回错误码8的原因及解决方案
- 错误代码中文查询GetLastError返回代码的含义
- 如何解决启动中的DLL文件加载错误
- Delphi 调试Dll报错 通过GetLastError显示错误信息。
- GetLastError返回错误代码对应的意思0-3099
- 错误代码中文查询GetLastError返回代码的含义
- 错误代码中文查询GetLastError返回代码的含义