首页 > 代码库 > C++ 根据操作系统版本调用不同的动态链接库

C++ 根据操作系统版本调用不同的动态链接库

在操作数据库时遇到一个问题:win7 sp1上编译ADO程序,在win7 sp1以下版本不能运行,(Win7系统下需要的动态文件与XP系统的需要的动态链接库不一样。需要根据系统的版本加载动态链接库。)

Win7 系统下:

需要的动态链接库

#import "MSADO15.DLL"rename_namespace("ADOWE") rename("EOF","EndOfFile")

Win XP下

 #import "msado60.tlb" rename_namespace("ADOWE")  rename("EOF", "adoEOF")


在定义类之前添加如下语句实现版本控制:

#if ((_WIN32_WINNT )==(_WIN32_WINNT_WINXP))
 #import "msado60.tlb" rename_namespace("ADOWE")  rename("EOF", "adoEOF")
#elif ((_WIN32_WINNT)==(_WIN32_WINNT_WIN7))
#import "MSADO15.DLL"rename_namespace("ADOWE") 
#endif


从而能实现将程序从Win7系统拷入到XP系统中能够正常打开数据库。



在控制台环境下测试  版本控制指令:

#include <windows.h>
#include<iostream>
using namespace std;




#if ((_WIN32_WINNT )==(_WIN32_WINNT_WINXP))
int Version=1; //预编译  在预编译外面定义全局变量 然后在预编译语句//中赋值。对变量赋值发生在编译过程,而预编译是只是实现一个简单的替换。
#elif ((_WIN32_WINNT)==(_WIN32_WINNT_WIN7))
int Version=2;
#else
int Version=3;
#endif
/*

错误写法:

int  Version ;

#if ((_WIN32_WINNT )==(_WIN32_WINNT_WINXP))
 Version=1;//无法识别Version  类型  导致程序中全局变量一直是0.
#elif ((_WIN32_WINNT)==(_WIN32_WINNT_WIN7))
Version=2; //无法识别Version  类型
#else
Version=3; //无法识别Version  类型
#endif

*/

void main()
{
    if(Version==1)
cout<<"Window XP!"<<endl;
else if(Version==2)
cout<<"Window 7"<<endl;
else
cout<<"未定义操作系统"<<endl;

}


在Win7系统下运行程序 输出:Window 7



C++ 根据操作系统版本调用不同的动态链接库