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