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中也有找到類似的資料,可參考一下

留言

這個網誌中的熱門文章

DOS Batch指令檔中如何記錄log資訊

用捷徑方式執行需帶入命令列參數的Windows Form程式

使用regular expression來match中括號(square bracket)