我正在开发卷影复制程序。我刚刚发现我需要使用一组不同的.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文件合并到一个项目中,这样我就不必编译两个不同版本的程序了?
答案 0 :(得分:2)
如果你需要使用两个不同版本的dll(因为如果我理解正确的问题就在那里,不同的lib / header只是冰山一角)你应该使用LoadLibrary
动态加载它,使用GetProcAddress
检查所需的入口点是否存在,并使用返回的函数指针调用所需的函数。
答案 1 :(得分:1)
您还可以创建两个项目配置,一个用于XP,另一个用于较新的Windows版本。然后将这两个文件添加到安装程序中,让安装程序检查它所安装的Windows版本,并选择正确的程序版本。 (这基本上就是我遇到问题时的所作所为)
更合适的解决方案是将其放入DLL中,创建该DLL的两个版本,然后运行时检查并加载正确的DLL。这样Windows更新不会导致问题。
答案 2 :(得分:0)
就个人而言,当图书馆开始变得有点/疯狂时,我开始考虑给有问题的库提供他们自己的进程,并使用某种RPC与它们进行交互。