c – COM,VARIANT包含BSTR.谁分配?

前端之家收集整理的这篇文章主要介绍了c – COM,VARIANT包含BSTR.谁分配?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
好的,所以我真的不能想到一个概括这一点的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中做什么样的模式?即使传递调用AddProperty的线程首先死机,并且正确地分配字符串,我应该如何传递包含已分配字符串的VARIANT,使该字符串可用于其他线程.

解决方法

在大多数情况下,当使用字符串或VARIANT调用COM函数时,唯一需要的是,这些对象在整个调用本身都可用.通话后,对象本身负责复制数据.例如,VARIANT将很可能使用VariantCopy函数来复制字符串,复制COM对象(增加引用计数).
您唯一应该担心的是当您在VARIANT中传递实际的界面时:在这种情况下,应该正确引用接口,并且QueryInterface,AddRef和Release都应该被相应地实现.并且在引用计数达到0之前不要释放该对象;)

编辑:哦,如果你想更多地了解COM编程,一定要通过“Don Box”得到“Essential COM”. Don Box是COM的大师,那本书将会教你几乎任何你想知道的COM和更多的东西;)

猜你在找的C&C++相关文章