1. 程式人生 > >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