UNICODE環境下使用STL
最近在處理一個小程式時,發現以往寫的小工具類別程式碼,因為都是基於多位元組字組的方式開發的,所以在使用STL時,也都直接使用多字元組字集(MBCS)的函式。
這些程式碼在引用到用新的V S2008(或VS2005)上面時,因為新專案一開始就預設是使用UNICODE了,所以一編譯起來就出現一堆的錯誤。
為了改正這些錯誤,並且讓舊程式碼也能在舊程式中正常編譯,就必須使用一些小技巧。
目前己知的錯誤大都是:
string在UNICODE環境中,要改為wstring
ifstream 在UNICODE環境中,要改為wifstream
為了能通用於所有環境,我是寫了一個小的標頭檔,在這個標頭檔中會依目前是否有定義巨集UNICODE 或 _UNICODE來決定要使用string / wstring
大致上的內容如下:
#pragma once
#include <string>
using namespace std;
#if defined( _UNICODE ) || defined( UNICODE )
typedef wstring STLString;
typedef wifstream tifstream;
#else
typedef string STLString;
typedef ifstream tifstream;
#endif
不過,使用這個標頭檔的話,還是得要將舊程式碼中的string改為STLString才行。大部份舊程式就不用改了,那新的程式可能就是要養成習慣都使用通用的類別名稱STLString(之類的)
在CodeProject中也有找到類似的資料,可參考一下。
這些程式碼在引用到用新的V S2008(或VS2005)上面時,因為新專案一開始就預設是使用UNICODE了,所以一編譯起來就出現一堆的錯誤。
為了改正這些錯誤,並且讓舊程式碼也能在舊程式中正常編譯,就必須使用一些小技巧。
目前己知的錯誤大都是:
string在UNICODE環境中,要改為wstring
ifstream 在UNICODE環境中,要改為wifstream
為了能通用於所有環境,我是寫了一個小的標頭檔,在這個標頭檔中會依目前是否有定義巨集UNICODE 或 _UNICODE來決定要使用string / wstring
大致上的內容如下:
#pragma once
#include <string>
using namespace std;
#if defined( _UNICODE ) || defined( UNICODE )
typedef wstring STLString;
typedef wifstream tifstream;
#else
typedef string STLString;
typedef ifstream tifstream;
#endif
不過,使用這個標頭檔的話,還是得要將舊程式碼中的string改為STLString才行。大部份舊程式就不用改了,那新的程式可能就是要養成習慣都使用通用的類別名稱STLString(之類的)
在CodeProject中也有找到類似的資料,可參考一下。
留言
張貼留言