【发布时间】:2011-01-20 03:00:50
【问题描述】:
我有一个 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,但我找不到任何关于手头特定问题的信息。
【问题讨论】: