繁体   English   中英

在一个 C++ 项目中使用两个不同版本的 a.lib 文件?

[英]Use two different versions of a .lib file in one C++ project?

我正在研究卷影复制程序。 我刚刚发现我需要使用一组不同的.h 文件 (vsbackup.h) 和关联的.lib 文件 (vssapi.lib) 来编译 Windows XP 的项目(与 Vista 和 7 相比)。 这是由于 .h 文件中的一系列细微变化:在 XP 中,诸如CreateVssBackupComponents()之类的调用是对 API 的调用(只有 vsbackup.h 中的声明); 最近的 vsbackup.h 将其更改为CreateVssBackupComponents() { CreateVssBackupComponentsInternal(); } 当我用CreateVssBackupComponents() { CreateVssBackupComponentsInternal(); }和 .lib 文件编译我的项目并在 XP 下运行程序时,它说

在 DLL “vssapi.dll”中找不到过程入口点“CreateVssBackupComponentsInternal”。

是否有可能将这两个不同的 lib 文件合并到一个项目中,这样我就不必编译两个不同版本的程序?

如果您需要使用 dll 的两个不同版本(因为如果我理解正确,问题就在那里,不同的库/头文件只是冰山一角),您应该使用LoadLibrary动态加载它,检查入口点的存在您需要GetProcAddress并使用它返回的 function 指针调用您需要的函数。

您还可以创建两种项目配置,一种用于 XP,另一种用于较新的 Windows 版本。 然后将这两个文件添加到您的安装程序并让安装程序检查它正在安装的 Windows 版本以及 select 程序的正确版本。 (这基本上就是我遇到你的问题时所做的)

更合适的解决方案是将其放入 DLL,创建该 DLL 的两个版本,然后运行时检查并加载正确的 DLL。 这样 Windows 更新就不会引起问题。

就个人而言,当库开始变得有点 /crazy/ 时,我开始考虑为有问题的库提供自己的进程,并使用某种 RPC 与它们进行交互。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM