代码之家  ›  专栏  ›  技术社区  ›  Chris Thornton

Delphi LoadLibrary找不到DLL其他目录-有什么好的选择吗?

  •  2
  • Chris Thornton  · 技术社区  · 16 年前

    FOOLib := LoadLibrary('foo.dll'); 
    ...
    If FOOLib <> 0 then 
    begin
      FOOProc := GetProcAddress(FOOLib , 'xInjectCert');
      FOOProc(myHttpRequest, Data, CertName);
    end;
    

    它非常适合foo.exe,因为dll就在那里。sadapp.exe无法加载库,因此foulib为0,其余的永远不会被调用。因此,sadapp.exe程序无法以静默方式注入证书,当我们针对产品进行测试时,如果证书丢失,则连接失败。显然,我们应该完全限定到DLL的路径。在没有深入讨论太多细节的情况下,直到最近,测试的某些方面才掩盖了这个问题,现在在代码中进行修复基本上已经太迟了,因为这需要一个完整的回归测试,而且没有时间去做。

    既然我们已经把自己画进了一个角落,我需要知道是否有什么选择我忽略了。虽然我们不能更改代码(对于这个版本),但是我们可以调整安装程序。我发现在路径中放置c:\fooapp是有效的。将foo.dll的第二个副本直接添加到c:\program files\unwantedstepchild中也是如此。 c:\fooapp\foo.exe在sadapp.exe运行时将始终运行,因此我希望Windows能找到这种方式,但显然不是。有没有办法告诉Windows我真的想要相同的DLL?也许是名单什么的?这就是我要找的那种“灵丹妙药”。

    1. 修改windows路径,可能在安装程序中。太难看了。
    2. 其他的?

    感谢您的指导,尤其是“其他”。我知道这个问题不一定是特尔斐特有的。谢谢!

    3 回复  |  直到 16 年前
        1
  •  9
  •   Ken White    16 年前

    MSDN文档 LoadLibrary 告诉您Windows将在何处搜索DLL。你要么硬编码到DLL的路径,把它放在与你的应用程序相同的文件夹中,要么把它放在LoadLibrary文档中的一个默认搜索位置。

        2
  •  3
  •   yonojoy    8 年前

    您可以扩展搜索路径 LoadLibrary SetDllDirectory .

    MSDN-Doku

    可以使用SetDllDirectory函数更改搜索路径。 建议使用此解决方案,而不是使用SetCurrentDirectory或 硬编码DLL的完整路径。

    您需要在 加载 电话:

    SetDllDirectory(PChar('c:\fooapp'));
    
        3
  •  0
  •   skamradt    16 年前

    ;c:\fooapp

    推荐文章