避免DLL版本控制问题 我有C++中的多个可执行程序,它们使用了许多C++语言编写的库(我有它们的全部来源)。
我面临的问题是:当可执行EXE包含dll时,它们可能都依赖于其他dll DLL1和DLL2:避免DLL版本控制问题 我有C++中的多个可执行程序,它们使用了许多C++语言编写的库(我有它们的全部来源)。,c++,windows,dll,C++,Windows,Dll,我面临的问题是:当可执行EXE包含dll时,它们可能都依赖于其他dll DLL1和DLL2: EXE ----- DLL | | DLL1 DLL2 如果DLL1和DLL2是同一个库,并且DLL2是DLL1的最新版本,那么我将很难链接和编译内容 我怎样才能解决这个问题?有时,由于向后兼容性问题,我不能直接转储DLL1并保持最新版本。Microsoft为Windows XP解决了这个问题,但几乎对“本机”开发人员隐瞒了如何做到这一点的信息 有点吓人的MSDN页面是这
EXE ----- DLL
| |
DLL1 DLL2
如果DLL1和DLL2是同一个库,并且DLL2是DLL1的最新版本,那么我将很难链接和编译内容
我怎样才能解决这个问题?有时,由于向后兼容性问题,我不能直接转储DLL1并保持最新版本。Microsoft为Windows XP解决了这个问题,但几乎对“本机”开发人员隐瞒了如何做到这一点的信息 有点吓人的MSDN页面是这一点的起点 基本上你要做的是:
关于步骤2,不需要手动添加或合并exe或dll的清单文件,因为Visual Studio的现代版本会自动将生成的清单与应用程序一起包含。有一个完整的项目设置选项卡专用于此 为此,使用DevStudio#pragma注册要包含在生成的清单中的程序集。这是一个应用程序(或dll)如何声明其对使用版本化版本的comctl32.dll感兴趣的示例-出于您的目的,您可以更改名称以反映您的“dll”程序集名称,并且不需要应用程序附带的程序集的版本或publicKeyToken参数
#pragma comment(linker,"\"/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
就个人而言,我的建议是避免整个混乱,只需将程序重新编译成独立的可执行文件。是的,它们会占用更多的磁盘空间,但是这些天,谁在乎呢?考虑到你有所有东西的源代码——而不是下面我复杂的答案——务实的解决方案是重建dll,包括版本号。然后exe将导入并使用“dll.1.0.dll”,dll将导入并使用“dll.2.0.dll”,每个人都可以存在于一个文件夹中。