Last Updated 2011/04/17
Visual C++ MFC CString(文字列)
BSTR変換
2004/03/23

ANSI 文字列を BSTR に変換するには,

1. MultiByteToWideChar() で Unicode 化した時のサイズ(文字数)を計算
2. SysAllocStringLen() で文字数分の BSTR を確保
3. あらためて MultiByteToWideChar() にて,SysAllocStringLen() で確保BSTR 上に ANSI->Unicode 変換した文字列を設定

という手順となる.

MFC であれば,マクロが用意されている.

    USES_CONVERSION;
    ::SysReAllocString( bstrDataArea, T2OLE(szGetData) );

SysReAllocString() はコピー元として OLECHAR * を引数とする.これは UNICODE 文字列である.

*bstrDataArea = SysAllocStringByteLen(szGetData, strlen(szGetData));

CString であれば CString::AllocSysString() や CString::SetSysString() で変換できる.

上記の SysAllocStringByteLen() では BSTR にはなってはいるが,バイナリイメージは前後の細かい部分を除くと元の ANSI と変化はない.
(BSTR は必ずしも文字列として意味のある OLECHAR 列を含む必要はない)


また,BSTR から CString に変換するには,AfxBSTR2CString() を使用する.
AfxPriv2.h に
void AFXAPI AfxBSTR2CString(CString* pStr, BSTR bstr);
が存在する.


参照
VC++から文字列を渡す方法
前後のTips
BSTR変換

DSS ProgrammingTipsCGI Ver1.02