好的,所以我真的不能想到一个总结这个的apropos标题.
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的线程首先死亡,并正确地取消分配字符串?
在大多数情况下,当您使用字符串或VARIANT调用COM函数时,唯一需要的是,这些对象在整个调用过程中都可用.在调用之后,对象本身负责制作数据的副本.例如,VARIANT很可能会使用VariantCopy函数来复制字符串,复制COM对象(增加引用计数).您唯一需要担心的是当您在VARIANT中传递实际接口时:在这种情况下,接口应该正确引用计数,并且QueryInterface,AddRef和Release都应该相应地实现.并且在引用计数达到0之前不要释放该对象;)
编辑:哦,如果你想了解更多有关COM编程的信息,请务必通过"Don Box"获得"Essential COM".唐盒是在 COM大师,这本书将教你几乎你会不会想了解COM和更多东西;)