我有一個ATL COM對象需要公開其他COM對象的集合,因此客戶端可以找出集合中有多少個對象(通過我可以提供的一個簡單的Count
屬性)和訪問對象使用其索引。這個對象集合是動態的 - 計數不是固定的 - 我不知道當我的主(父)對象被構造時會有多少(因此我不能在我的FinalConstruct
中創建這些對象)。我想要公開的對象只有只讀屬性。COM對象的動態數組
我想要做的是在第一次需要時創建一個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,但我無法找到關於特定問題的任何信息。
實際上,從MSVS2010開始,它必須是'std :: vector >>,因爲不幸的操作符和重載:http://blogs.msdn.com/b/vcblog/archive/2009 /05/25/stl-breaking-changes-in-visual-studio-2010-beta-1.aspx –
mcmcc
2013-03-05 16:49:50
儘管在C++ 11中不需要CAdapt:http://stackoverflow.com/questions/24285016/ do-vectors-of-ccomptr-still-need-cadapt – 2014-06-18 16:03:08
使用ATL :: CComObject的'std :: vector'也可以嗎? – 2015-09-10 13:00:11