您的位置:首页 > 编程语言 > C语言/C++

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

2014-12-18 22:07 197 查看
在操作数据库时遇到一个问题: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: