OK, also konnte ich nicht wirklich an einen passenden Titel denken, der das zusammenfasst.COM, VARIANT enthält BSTR. Wer vergibt?
Die IPrintPipelinePropertyBag-Schnittstelle verfügt über die Methode AddProperty, die passend "eine Eigenschaft zu einem Eigenschaftenbeutel 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, um dem Eigenschaftenbeutel eine Zeichenfolge 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 der PropertyBag die Zeichenfolge verarbeitet und eine eigene Kopie erstellt. Da wir alle möglichen Dinge in einem VARIANT speichern können, sollte dies nicht der Fall sein.
Angenommen, die Zeichenfolge wird nicht behandelt, ist meine Frage, was ist das Muster dafür in COM zu tun? Wie sollte ich ein VARIANT übergeben, das eine zugewiesene Zeichenfolge enthält, diese Zeichenfolge für andere Threads verfügbar machen, selbst wenn der Thread, der AddProperty genannt wird, zuerst gestorben ist, und die Zuweisung der Zeichenfolge ordnungsgemäß aufheben?