首页 > 代码库 > 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++ 根据操作系统版本调用不同的动态链接库