char*,wchar_t*,CStringとBSTR間の変換

4068 ワード


前言


本稿では,すべての変換方法を列挙することを試みず,著者らが使いやすいと考えている方法だけを列挙する.
 

1.char*とwchar_t*の相互変換


中間クラスを利用できるbstr_t(ヘッダファイルcomdef.h)相互変換が容易
const wchar_t* wText = (_bstr_t)" ";
char* cText = (_bstr_t)L" ";

変換はA 2 T,A 2 W,T 2 A,T 2 Wなどのマクロで行うことができる
char* cText = " ";
USES_CONVERSION;
wchar_t wText = A2W(cText);

そのうちUSES_CONVERSION;一部のローカル変数を初期化するために使用されますが、なぜ1つのマクロで変数を初期化するのかについては、http://blog.csdn.net/wuji0447/article/details/4659001で詳細に説明しています.
また、これらはマクロなので、使うときは気をつけてください.http://www.cnblogs.com/rainbowzc/archive/2009/09/07/1562168.html
 
 

2.char*転送CString


注意:CStringの内部実装は、プロジェクトプロパティページのCharactor Set構成に関連しているため、その構成はchar*またはwchar_に直接影響します.t*相互変換の方式.
私たちは直接char*でCStringを構築してchar*をCStringに変えることができます.
Charactor Setコンフィギュレーションアイテムnot setの場合、直接char*でCStringを構築したり、char*をCStringに割り当てたりすることができます.Charactor SetコンフィギュレーションアイテムがUNICODの場合、wchar_に変換できます.t*はCStringに再割り当てされます.
 

3.C.String char*


Charactor Setコンフィギュレーションアイテムnot setの場合、直接GetBuffer関数でCStringをchar*に変換できます.
CString a(" ");
char* cText = a.GetBuffer();

cTextのコンテンツを操作してaを再使用する場合は、a.ReleaseBuffer()を呼び出してキャッシュを解放する必要があることに注意してください.
 

4.wchar_t*とCStringの相互変換


2,3参照
 

5.char*, wchar_t*トランスBSTR


中間クラスを利用可能bstr_tが回る
char* cText = " ";
BSTR bstr1 = (_bstr_t)cText;

wchar_t* wText = L" ";
BSTR bstr2 = (_bstr_t)wText;

 
SysAllocStringなどの関数を使用して回転できます.
BSTR bText1 = ::SysAllocString(L" ");
BSTR bText2 = ::SysAllocStringLen(L" ",2);
。。。
//  
SysFreeString(bText1); 
SysFreeString(bText2);

 

6.BSTR回転char*,wchar_t*


中間クラスを利用可能bstr_tが回る
 

7.CString回転BSTR

CString a(L" ");
BSTR bstr = a.AllocSysString();
SysFreeString(bstr); //  

 

8.BSTR回転CString


BSTRは、CStringに直接構築または付与することによってCStringに変換することができる
BSTR bstr = (_bstr_t)cText;
CString a = bstr;