Frage

OK, so konnte ich nicht wirklich denke, einen apropos Titel, der diese zusammenfasst.

Die IPrintPipelinePropertyBag Schnittstelle hat die Methode AddProperty, die treffend genug „um eine Eigenschaft zu einer Eigenschaft Tasche hinzufügt.“

http://msdn.microsoft. com / en-us / library / aa506384.aspx

  

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

Wir verwenden den folgenden Code einen String in der Eigenschafts hinzuzufügen.

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

Es ist ziemlich offensichtlich, aber, dass die CComBSTR und CComVariant die erstellt wird, nach einer Weile den Gültigkeitsbereich verlässt. Ich bin mir nicht sicher, ob die PropertyBag die Zeichenfolge behandelt und macht seine eigene Kopie. Da wir alle möglichen Dinge in einem VARIANT speichern kann, sollte dies nicht der Fall sein.

die Zeichenfolge Angenommen wird nicht behandelt, meine Frage ist, was ist das Muster, das in COM zu tun? Wie soll ich einen VARIANT übergeben, die eine zugewiesene Zeichenfolge enthält, die Zeichenfolge zur Verfügung stellen für andere Threads auch wenn der Thread, AddProperty starb zuerst und de-zuteilen die Zeichenfolge richtig?

genannt
War es hilfreich?

Lösung

Wenn Sie eine COM-Funktion mit Streichern oder VARIANTs in den meisten Fällen rufen die einzige garantuee erforderlich ist, dass diese Objekte im gesamten Gespräch möglich selbst. Nach dem Aufruf ist das Objekt selbst verantwortlich für die Kopien der Daten. Zum Beispiel VARIANT ist höchstwahrscheinlich verwenden, um die VariantCopy Funktion, die Saiten kopieren, kopieren Sie COM-Objekte (erhöht Referenzzählung). Das einzige, was Sie kümmern sollten, ist, wenn Sie eine tatsächliche Schnittstelle im VARIANT passieren: in diesem Fall sollte die Schnittstelle richtig gezählt Bezugnahme und Query-Interface, AddRef und Release sollten alle entsprechend umgesetzt werden. Und ausplanen nicht immer das Objekt vor dem Referenzzähler 0 erreicht;)

EDIT: Ach ja, und wenn Sie mehr über COM-Programmierung lernen wollen, sollten Sie „Essential COM“ von „Don Box“ zu bekommen. Don Box ist die COM-Guru, und das Buch lernen Sie fast alles, was Sie jemals über COM und mehr wissen wollen;)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top