У меня есть COM-объект ATL, который должен предоставлять коллекцию других COM-объектов, чтобы клиенты могли узнать, сколько объектов в коллекции (через простое свойство Count
, которое я могу предоставить) и получить доступ к объектам, используя его индекс. Эта коллекция объектов является динамической - количество не фиксировано - и я не знаю, сколько будет, когда будет построен мой основной (родительский) объект (поэтому я не могу создать эти объекты, например, в моем FinalConstruct
) , Объекты, которые я хочу выставить, имеют свойства только для чтения.
Что я хочу сделать, так это каким-то образом создать std::vector
этих объектов при первом использовании. Я хочу использовать интеллектуальные COM-указатели ATL, где это возможно, поэтому мне не нужно вручную управлять количеством ссылок и т. Д., Но я не уверен, следует ли мне использовать 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];
}
Если у кого-нибудь есть указания на то, как мне этого добиться, я был бы очень рад. Есть отличная статья о том, как обнажить статический объект , но я не могу найти ничего о конкретной проблеме.