caibirdy1985

如何解决加载动态链接库DLL失败,返回0,GetLastError返回错误码126

通常情况下使用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;

 

分类:

技术点:

相关文章:

  • 2021-11-12
  • 2021-08-13
  • 2021-11-20
  • 2021-12-22
  • 2021-11-06
  • 2021-04-05
  • 2022-12-23
  • 2021-09-18
猜你喜欢
  • 2021-09-18
  • 2021-12-17
  • 2021-07-31
  • 2021-11-25
  • 2021-08-10
  • 2022-12-23
  • 2021-08-05
相关资源
相似解决方案