当前位置:  开发笔记 > 编程语言 > 正文

COM,VARIANT包含BSTR.谁分配?

如何解决《COM,VARIANT包含BSTR.谁分配?》经验,为你挑选了1个好方法。

好的,所以我真的不能想到一个总结这个的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的线程首先死亡,并正确地取消分配字符串?



1> Frans-Willem..:

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

编辑:哦,如果你想了解更多有关COM编程的信息,请务必通过"Don Box"获得"Essential COM".唐盒是 COM大师,这本书将教你几乎你会不会想了解COM和更多东西;)

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有