好的,所以我无法想到一个恰当的标题来概括这个。
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的线程先结束,并正确释放字符串?