0

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

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

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

4

3 回答 3

2

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

于 2011-07-07T00:37:33.530 回答
1

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

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

于 2011-07-13T21:28:31.977 回答
0

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

于 2011-07-07T00:36:04.293 回答