CString
インスタンスを適切に割り当てられたものに変換し、それをCOMメソッドにBSTR
渡す必要があります。ANSIとUnicodeの両方で同じようにコンパイルおよび動作するコードを作成するには、任意の形式をBSTR
UnicodeBSTRに変換するために使用します。CString::AllocSysString()
CString
返されたBSTRは誰も所有していないので、可能な限り最も例外安全な方法で、可能な限り少ないコードで呼び出しが行われた後、それを処理して解放する必要があります。
現在、私ATL::CComBSTR
は生涯管理に使用しています:
ATL::CComBSTR converted;
converted.Attach( sourceString.AllocSysString() ); //simply attaches to BSTR, doesn't reallocate it
interface->CallMethod( converted );
ここで私が気に入らないのはATL::CComBSTR
、変換結果へのバインドを作成するために2つの別個のステートメントが必要なことです。
同じタスクを実行するためのより良い方法はありますか?