加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 03:25:08 所属栏目:百科 来源:网络整理
导读:好的,所以我真的不能想到一个概括这一点的apropos标题. IPrintPipelinePropertyBag接口具有AddProperty方法,它足以“将属性添加到属性包”. http://msdn.microsoft.com/en-us/library/aa506384.aspx AddProperty( [in,string] const wchar_t *pszName,[in] c
好的,所以我真的不能想到一个概括这一点的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和更多的东西;)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读