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?