1

注意:这个问题不是关于 MFC/CRT DLL 链接有/没有.manifest文件、避免清单查找(即从当前路径强制加载)、VC redist 安装和类似问题。

我有一组 DLL,供不同的应用程序使用。这些应用程序和 DLL 有一些产品版本(如 7.0、8.0 等)。总而言之,让我使用一个 DLL 和两个应用程序。

  • App.exe取决于Core.DLL
  • GoodApp.exe也取决于Core.DLL

App.EXE7.0 版需要Core.DLL7.0 版。同样,GoodApp版本 X 将需要版本 X 的 DLL。

由于 DLL 将由不同的应用程序共享,因此我将 DLL 放入了一些公共路径。这样可以避免将 DLL 粘贴到所有路径上。\SharedDLL为此设置了一些路径。并且(假设),我已经为此设置了PATH变量。因此,当任何应用程序加载时,操作系统将简单地从该公共路径加载 Core.DLL。

一切都好。但是如果 App.exe 是 64 位/Debug,或者其他配置呢?公共 DLL 路径不能包含所有 DLL(32/64、调试/发布)。在类似的行中,App.exeY 版本的不能使用Core.DLLX 版本(不是X>Y 或 Y>X,而只是X!=Y,X 版本的 App 不能使用 Y 版本的 DLL)。

简而言之,App-32bit-Release-VersionX完全需要DLL-32bit-Release-VersionX,仅此而已!由于 DLL 名称相同,我无法将它们放入一个公共路径中。而且,由于有几十个应用程序(还有 DLL!)依赖于Core.DLL,我只是不想浪费空间和时间将 DLL 复制到 EXE 的路径中。

是的,我使用 post-build-setup 将 DLL 适当地复制到所有路径中。这解决了时间,但浪费了空间。如果有新的应用程序进来,也必须修改 PBS 以复制到该新路径。

问题是:如何利用 Windows/MFC/CRT DLL 使用的 .manifest 功能?他们确实利用WinSxS文件夹来做这样的事情。

4

1 回答 1

1

也许这会帮助你:

如何:在 C/C++ 应用程序中嵌入清单

Visual Studio 中的清单生成

使用 Visual Studios C++ 清单文件

也按照这些页面中的链接

于 2012-10-13T14:54:20.213 回答