Domanda

OK, quindi non potevo davvero pensare a un titolo a proposito che riassuma questo.

L'interfaccia IPrintPipelinePropertyBag ha il metodo AddProperty che giustamente " aggiunge una proprietà a un bag di proprietà. "

http://msdn.microsoft. com / it-it / library / aa506384.aspx

  

AddProperty ([in, string] const   wchar_t * pszName, [in] const   VARIANT * pVar);

Usiamo il seguente codice per aggiungere una stringa al bag della proprietà.

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

È abbastanza ovvio, tuttavia, che CComBSTR e CComVariant che vengono creati vanno fuori campo dopo un po '. Non sono sicuro che PropertyBag gestisca la stringa e ne faccia una copia. Dato che possiamo archiviare tutti i tipi di cose all'interno di un VARIANT, questo non dovrebbe essere il caso.

Supponendo che la stringa non sia gestita, la mia domanda è: qual è lo schema per farlo in COM? Come devo passare un VARIANT che contiene una stringa allocata, renderla disponibile per altri thread anche se il thread che ha chiamato AddProperty è morto per primo e de-allocare correttamente la stringa?

È stato utile?

Soluzione

Quando si chiama una funzione COM con stringhe o VARIANTI nella maggior parte dei casi, l'unica garanzia necessaria è che tali oggetti siano disponibili durante la chiamata stessa. Dopo la chiamata, l'oggetto stesso è responsabile della creazione di copie dei dati. Ad esempio, VARIANT utilizzerà molto probabilmente la funzione VariantCopy che copia le stringhe, copia gli oggetti COM (aumenta il conteggio dei riferimenti). L'unica cosa di cui dovresti preoccuparti è quando passi una vera interfaccia in VARIANT: in tal caso l'interfaccia deve essere correttamente conteggiata come riferimento e QueryInterface, AddRef e Release dovrebbero essere implementati di conseguenza. E non deallocare mai quell'oggetto prima che il conteggio dei riferimenti raggiunga 0;)

EDIT: Oh, e se vuoi saperne di più sulla programmazione COM, assicurati di ottenere " COM essenziale " di " Don Box " ;. Don Box è il guru della COM e quel libro ti insegnerà quasi tutto ciò che vorresti sapere sulla COM e altro;)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top