我如何通知隔离应用程序依赖DLL的位置?

时间:2010-07-29 15:16:00

标签: c++ windows visual-c++ dll manifest

我写的几个独立的应用程序都依赖于我自己和团队编写的dll。当我们只有几个dll但是构建输出目录变得相当混乱并且难以导航时,事情很好。我最终希望输出构建目录包含以下结构:

  • $(OUTDIR)
    • - (Application.exe)
    • - (Application.exe)
    • - Libs文件夹
      • - (LibA.dll)
      • - (LibB.dll)
      • (等)

有没有办法让应用程序在运行时使用类似清单文件的内容查看这些库的“Libs文件夹”?

1 个答案:

答案 0 :(得分:1)

Dynamic-Link Library Search Order描述了修改搜索路径的可能性。它会将搜索顺序和提及manifests以及SetDllDirectory()功能描述为更改搜索顺序的可能性。

虽然SetDllDirectory看起来很有前途,但只有动态加载你的DLL才能可靠地工作,而你根据我的理解做不到这一点。

现在,关于使用清单:Application Configuration Files讨论了privatePath属性,该属性可用于 [指定]应用程序基本目录(可能包含程序集)的子目录的相对路径< / em>的。这对我来说听起来似乎只能用于并排组装,但你可能想尝试一下。

我会很乐意承认我从未打扰过清单(除了你需要知道在VS 2005中要运行的任何东西),我建议隐藏隐藏的库子目录加载DLL并将它们放在app目录中并完成它。对于显式(动态)加载的DLL,您可以从可执行路径中推导出它们的完整路径,并将其提供给LoadLibrary(),也不需要为搜索路径烦恼。