【发布时间】:2010-09-20 15:42:09
【问题描述】:
好的,所以我真的想不出一个恰当的标题来总结这一点。
IPrintPipelinePropertyBag 接口具有 AddProperty 方法,该方法恰如其分地“将属性添加到属性包”。
http://msdn.microsoft.com/en-us/library/aa506384.aspx
AddProperty( [in, string] 常量 wchar_t *pszName, [in] 常量 变体 *pVar );
我们使用下面的代码在属性包中添加一个字符串。
CComVariant varProperty = CComBSTR(someString);
pPrintPropertyBag->AddProperty(L"SOME_PROPERTY", &varFilename);
但很明显,所创建的 CComBSTR 和 CComVariant 会在一段时间后超出范围。我不确定 PropertyBag 是否处理字符串并制作自己的副本。由于我们可以在 VARIANT 中存储各种内容,因此不应该这样。
假设未处理字符串,我的问题是,在 COM 中执行此操作的模式是什么?我应该如何传递一个包含已分配字符串的 VARIANT,即使调用 AddProperty 的线程先死亡,也使该字符串可用于其他线程,并正确取消分配该字符串?
【问题讨论】:
标签: c++ windows com variant bstr