gpt4 book ai didi

c++ - COM,包含 BSTR 的 VARIANT。谁分配?

转载 作者:可可西里 更新时间:2023-11-01 12:42:59 24 4
gpt4 key购买 nike

好吧,所以我真的想不出一个合适的标题来总结这一点。

IPrintPipelinePropertyBag 接口(interface)具有 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 中传递实际接口(interface)时:在这种情况下,接口(interface)应该被正确地引用计数,并且 QueryInterface、AddRef 和 Release 都应该相应地实现。并且永远不要在引用计数达到 0 之前取消分配该对象;)

编辑:哦,如果您想学习更多关于 COM 编程的知识,请务必阅读“Don Box”的“Essential COM”。 Don Box 是 COM 大师,那本书将教给您几乎所有您想了解的有关 COM 的知识,甚至更多 ;)

关于c++ - COM,包含 BSTR 的 VARIANT。谁分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/261357/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com