¿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?