c++ windows com variant bstr

c++ - COM, VARIANT que contiene BSTR. ¿Quién asigna?



windows (1)

OK, así que no podría pensar en un título apropos que lo resuma.

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 ([en, cadena] const wchar_t * pszName, [en] const VARIANT * pVar);

Usamos el siguiente código para agregar una cadena a la bolsa de propiedades.

CComVariant varProperty = CComBSTR(someString); pPrintPropertyBag->AddProperty(L"SOME_PROPERTY", &varFilename);

Sin embargo, es bastante obvio que el CComBSTR y CComVariant que se creó quedan fuera de alcance 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?


Cuando llama a una función COM con cadenas o VARIANTES en la mayoría de los casos, la única garantía necesaria es que esos objetos estén disponibles durante toda la llamada. Después de la llamada, el objeto en sí es responsable de hacer copias de los datos. Por ejemplo, lo más probable es que VARIANT use la función VariantCopy que copiará cadenas, copiará objetos COM (aumenta el recuento de referencias). Lo único que debe preocuparse es cuando pasa una interfaz real en el VARIANT: en ese caso, la interfaz debe contar con una referencia adecuada, y QueryInterface, AddRef y Release deberían implementarse en consecuencia. Y nunca desasigne ese objeto antes de que el recuento de referencias llegue a 0;)

EDITAR: Ah, y si desea obtener más información acerca de la programación COM, asegúrese de obtener "COM esencial" por "Don Box". Don Box es el gurú COM, y ese libro te enseñará casi cualquier cosa que quieras saber sobre COM y más;)