ОК, поэтому я не мог придумать подходящего заголовка, который бы суммировал это.
Интерфейс IPrintPipelinePropertyBag имеет метод AddProperty, который достаточно удачно «добавляет свойство в пакет свойств».
http://msdn.microsoft.com/en-us/library/aa506384.aspx
AddProperty ([in, string] const
wchar_t * pszName, [in] const
VARIANT * pVar);
Мы используем следующий код для добавления строки в пакет свойств.
CComVariant varProperty = CComBSTR(someString);
pPrintPropertyBag->AddProperty(L"SOME_PROPERTY", &varFilename);
Вполне очевидно, однако, что созданные CComBSTR и CComVariant через некоторое время выходят из области видимости. Я не уверен, что PropertyBag обрабатывает строку и делает свою собственную копию. Поскольку мы можем хранить все виды вещей внутри VARIANT, этого не должно быть.
Если предположить, что строка не обработана, мой вопрос: каков шаблон для этого в COM? Как мне передать VARIANT, который содержит выделенную строку, сделать эту строку доступной для других потоков, даже если поток, вызвавший AddProperty, умер первым, и правильно отменить выделение строки?