Pregunta

OK, así que realmente no podría pensar en un título apropiado que resuma esto.

La interfaz IPrintPipelinePropertyBag tiene el método AddProperty que acertadamente agrega una propiedad a una bolsa de propiedades.

http://msdn.microsoft. com / es-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 propiedades.

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

Sin embargo, es bastante obvio que CComBSTR y CComVariant que se crea quedan fuera de alcance después de un tiempo. No estoy seguro de si el 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?

¿Fue útil?

Solución

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

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top