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

时间:2011-07-06 22:40:20

标签: c++ dll shadow-copy

我正在开发卷影复制程序。我刚刚发现我需要使用一组不同的.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文件合并到一个项目中,这样我就不必编译两个不同版本的程序了?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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