OK, así que no podría pensar en un título apropos que lo resuma.COM, VARIANT que contiene BSTR. ¿Quién asigna?
La interfaz IPrintPipelinePropertyBag tiene el método AddProperty que acertadamente "agrega una propiedad a una bolsa de propiedades".
http://msdn.microsoft.com/en-us/library/aa506384.aspx
AddProperty ([in, string] const wchar_t * pszName, [en] const VARIANT * PVAR);
Utilizamos el siguiente código para agregar una cadena a la bolsa de la propiedad.
CComVariant varProperty = CComBSTR(someString);
pPrintPropertyBag->AddProperty(L"SOME_PROPERTY", &varFilename);
que es bastante obvio, sin embargo, que el CComBSTR y CComVariant que se crea se salen del ámbito después de un tiempo. No estoy seguro si PropertyBag maneja la cadena y hace su propia copia. Como podemos almacenar todo tipo de cosas dentro de un VARIANT, este no debería ser el caso.
Suponiendo que la cadena no se maneja, mi pregunta es, ¿cuál es el patrón para hacer esto en COM? ¿Cómo debo pasar un VARIANT que contiene una cadena asignada, hacer que esa cadena esté disponible para otros hilos, incluso si el hilo que llamó AddProperty murió primero, y desasignar la cadena correctamente?