¿Cómo convertir CString a BSTR para pasarlo como un parámetro "en" a un método COM?

Necesito convertir unCString instancia en un debidamente asignadoBSTR y pasar esoBSTR en un método COM. Tener código que compile y funcione de forma indentiva tanto para ANSI como para Unicode que usoCString::AllocSysString() para convertir cualquier formatoCString a un BSTR de Unicode.

Dado que nadie es propietario del BSTR devuelto, debo cuidarlo y liberarlo después de que la llamada se realice de la manera más segura posible y con el menor código posible.

Actualmente usoATL::CComBSTR para la gestión de por vida:

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

Lo que no me gusta aquí es que necesito dos declaraciones separadas para simplemente construir elATL::CComBSTR ligado al resultado de la conversión.

¿Hay una mejor manera de lograr la misma tarea?

Respuestas a la pregunta(3)

Su respuesta a la pregunta