【发布时间】:2014-07-15 08:30:39
【问题描述】:
我有 2 个 A 和 B 的 dll,它们都将部署到不同的文件夹位置。
例如,
Dll A in C:\Users\PC\Desktop\Project
Dll B in C:\Users\PC\Desktop\Project\B Folder
dll A如何加载dll B而不是使用LoadLibrary方法?
谢谢。
【问题讨论】:
我有 2 个 A 和 B 的 dll,它们都将部署到不同的文件夹位置。
例如,
Dll A in C:\Users\PC\Desktop\Project
Dll B in C:\Users\PC\Desktop\Project\B Folder
dll A如何加载dll B而不是使用LoadLibrary方法?
谢谢。
【问题讨论】:
您不使用LoadLibrary。您使用 B 的头文件和.lib 编译 DLL A 并引用 DLL B。然后让系统加载器解决依赖关系。更糟糕的是,您使用清单 (SxS) 来微调控制要在运行时加载的 DLL。
LoadLibrray 应该仅在您需要执行运行时功能开关时使用,当您需要仅在 DLL 存在并且可能是某个版本时才需要表现出某种行为时。一些许可方案可能需要动态加载,但几乎总是可以更好地解决。操作系统依赖项(例如,在 XP 上以一种方式运行,在 Win7 上以另一种方式运行,以利用较新的操作系统的功能)是可接受的LoadLibrary 用法。
【讨论】:
B Folder 添加到PATH,或者最好部署一个清单并指定位置。见Building C/C++ Side-by-side Assemblies