Como converter CString da melhor maneira para BSTR para passá-lo como um parâmetro "in" para um método COM?

Preciso converter umCString instância em um alocado corretamenteBSTR e passar issoBSTR em um método COM. Para ter um código que compila e funciona indenticamente para ANSI e Unicode, usoCString::AllocSysString() para converter qualquer formatoCString para um BSTR Unicode.

Como ninguém é dono do BSTR retornado, preciso cuidar dele e liberá-lo depois que a chamada for realizada da maneira mais segura possível contra exceções e com o mínimo de código possível.

Atualmente eu usoATL::CComBSTR para gerenciamento vitalício:

 ATL::CComBSTR converted;
 converted.Attach( sourceString.AllocSysString() ); //simply attaches to BSTR, doesn't reallocate it
 interface->CallMethod( converted );

O que não gosto aqui é que preciso de duas instruções separadas para construir apenas oATL::CComBSTR ligado ao resultado da conversão.

Existe uma maneira melhor de realizar a mesma tarefa?

questionAnswers(3)

yourAnswerToTheQuestion