gpt4 book ai didi

c++ - COM 对象的动态数组

转载 作者:搜寻专家 更新时间:2023-10-30 23:50:18 24 4
gpt4 key购买 nike

我有一个 ATL COM 对象,它需要公开其他 COM 对象的集合,因此客户可以找出集合中有多少对象(通过我可以提供的简单 Count 属性)并使用访问这些对象它的指数。这个对象集合是动态的——计数不固定——我不知道当我的主要(父)对象被构造时会有多少(所以我不能在我的 FinalConstruct 中创建这些对象例如) .我要公开的对象只有只读属性。

我想做的是以某种方式创建一个 std::vector第一次需要这些对象时。我想尽可能使用 ATL 智能 COM 指针,这样我就不需要手动管理引用计数等,但我不确定我是否应该使用 CComPtr , 'CComQIPtr' 等

假设我要返回的对象称为 IChild ,我希望我能做这样的事情:

std::vector<CComPtr<IChild> > children;
...
CComPtr<IChild> child;
// Somehow instantiate an IChild?
...
children.push_back(child);

STDMETHODIMP Parent::GetAt(LONG index, IChild** pRet)
{
*pRet = children[index];
}

如果有人对我如何实现这一目标有任何指示,我将非常欢迎。有一个 excellent article on exposing a static object ,但我找不到任何关于手头特定问题的信息。

最佳答案

是的,std::vector< CComPtr<IChild> >是这样做的方法 - 你会得到一个动态数组 IChild*管理 IChild 的生命周期-派生对象。一旦你想转换 IChild*派生接口(interface)你必须使用 QueryInterface()与使用 dynamic_cast 的方式相同使用 C++ 对象。

没有意义使用CComQIPtr对于数组。 CComQIPtr的主要用途就是有一个方便的方式来调用QueryInterface()在指向可能实现感兴趣接口(interface)的对象的指针上。而不是调用 QueryInterface()并检查调用 CComQIPtr 的结果构造函数并检查结果对象是否包含非空指针。你可以使用 CComQIPtr在使用您的数组的代码中,但将它用于数组本身是没有意义的。

关于c++ - COM 对象的动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2319224/

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