我的基本问题是:我的程序 (MyProgram.exe) 依赖于另一个程序 (OtherProgram) 的 DLL,我试图避免每次 OtherProgram 更新时重新打包一个新的 DLL。我希望在启动时在 OtherProgram 的 DLL 中有 MyProgram.exe 链接,但我不完全确定 Windows 是否允许这样做。因此,如果有某种解决方法也是可以接受的。
仅针对某些背景,该平台是 Windows 7 x64,当我在 MyProgram.exe 项目目录中创建指向 OtherProgram 安装目录中 DLL 的符号链接(symbolic link)时,MyProgram.exe 运行良好。当我尝试在没有符号链接(symbolic link)的情况下运行它时,出现“程序无法启动,因为您的计算机中缺少 OtherProgramDLL.dll”错误。
非常感谢任何建议或相关信息的链接!
编辑:澄清:DLL 在编译时没有链接,这个问题在运行时突然出现
最佳答案
Windows 世界中有两种类型的动态链接:
- Load-Time链接是在程序启动时自动加载 DLL。 Windows 使用我将在下面讨论的特定算法找到此 DLL。
- Run-Time链接是指您通过在您的代码中调用
LoadLibrary
专门加载一个DLL。类似的规则适用于如何找到库,但您可以指定完全限定或相对限定的路径来控制搜索。
在加载时链接的情况下,MS 建议将程序的 DLL 存储在加载应用程序的同一目录中并从中加载。如果这完全可行,这可能是您的最佳选择。
如果这不起作用,还有其他几个选项,outlined here .一种是通过将 DLL 放在工作目录或加载应用程序的目录中来利用搜索顺序。
您可以通过以下方式更改应用程序的工作目录:
- 为您的应用程序创建快捷方式。
- 调出快捷方式的属性
- 使用 DLL 所在的目录编辑“开始于”属性。
当您使用快捷方式启动应用程序时,它将加载正确的 DLL。
加载时链接的其他选项包括:
- 向您的应用程序添加 list ,指定您的依赖项 assemblies是,或者,
- 设置
路径
。
关于c++ - 在程序启动时从另一个目录加载 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10606304/