为什么LoadLibrary会成功或失败,具体取决于当前目录?

1 delphi firefox loadlibrary delphi-xe2

我遇到了LoadLibrary的问题,这在我之前从未发生过,这是我第一次看到这个,我正在尝试在"C:\ Program Files(x86)\ Mozilla中加载模块"nss3.dll" Firefox \"与LoadLibrary,为了从它导入一些功能,但它失败了0返回值,我试图从system32文件夹硬编码.dll它工作正常,任何想法发生了什么?

编辑:我忘了提及,克服这个问题的一种方法是调用SetCurrentDirectory然后导入模块而不指定.dll的路径,但事实并非如此,我想找出它为什么会发生在我身上.

编辑:这是一些片段(这是有效的):

var
  NSSModule: HModule;
begin
  SetCurrentDir('C:\Program Files (x86)\Mozilla Firefox');
  NSSModule := LoadLibrary('nss3.dll');
Run Code Online (Sandbox Code Playgroud)

这个,不起作用,不知道为什么......:

var
  NSSModule: HModule;
begin
  NSSModule := LoadLibrary('C:\Program Files (x86)\Mozilla Firefox\nss3.dll');
Run Code Online (Sandbox Code Playgroud)

Ser*_*yuz 9

您正在加载的DLL正试图在同一文件夹(mozglue.dll)中静态加载另一个DLL.这就是为什么当你设置工作目录时它的工作原理.如果不这样做,因为firefox的路径不在系统路径中,api无法找到dll.你可以在这里找到关于dll搜索的细节.