BSTR
COM関数など、いくつかの特定の用途を持つこの奇妙なWindowsデータ型です。MSDN によると、これにはWCHAR
文字列と、長さ記述子などのその他の要素が含まれています。Windows は、カプセル化された_bstr_t
クラスを提供してくれますBSTR
。割り当てと割り当て解除を処理し、いくつかの追加機能を提供します。これには、 を受け取るコンストラクタと を受け取るコンストラクタを含む4 つのコンストラクタchar*
がありwchar_t*
ます。前者についての MSDN の説明: 「_bstr_t
呼び出しSysAllocString
て新しいBSTR
オブジェクトを作成し、それをカプセル化することによってオブジェクトを構築します。このコンストラクターは、最初にマルチバイトから Unicode への変換を実行します。」
また、文字列へのポインターを 、 、 のいずれかとして抽出できる演算子もあり、それらがヌルで終了していることは確かです。これはすばらしいことです。char*
const char*
wchar_t*
マルチバイトと Unicode の間で変換する方法について、しばらく読んでみました。また、エンコーディングが異なる可能性があるため、 and の使用方法mbstowcs
とwcstomb
、 andMultiByteToWideChar
のほうが優れていることについての多くの話を見てきました。WideCharToMultiByte
それはすべて頭痛の種のように思えるので、を構築して操作を使用して文字列にアクセスできるかどうか疑問に思ってい_bstr_t
ます。
char* multi = "asdf";
_bstr_t bs = _bstr_t(mb);
wchar_t* wide = (wchar_t*)bs; // assume read-only
これに対する私の直感的な答えは、Windowsが舞台裏で何をしているのかわからないということだと思います。そのため、 / ではなく / (私は本当に / を意味していると思います) の使用に問題がある場合、リスクをmbstowcs
冒すwcstomb
べきmbstowcs_s
ではありません。 Windowsがそれらを使用する可能性があります。(ここでは「コードページ」を指定していないので、後者を使用していないことはほぼ確実です.さまざまなエンコーディングなどのすべてを実際に把握していますが、それはまったく別の質問であり、インターネット全体で対処されているようです.wcstomb_s
MultiByteToWideChar
WideCharToMultiByte
mbstowcs_s
wcstomb_s
すっごく、その潜在的な懸念は別として、これを行うことに何か問題はありますか?