Здравствуйте, vitaly_spb, Вы писали:
[]
AS>>Это нужно еще Advise немного переделать.
_>А это что значит?
Это значит, что я загнался.

Имелось в виду Add — добавление объекта.
AS>>А вообще, такие вещи на map'е делать — самое то!
_>С радостью, может подскажешь как сделать это же с помощью map?
std::map<long,LPDISPATCH> m_map;
HRESULT Add(LPDISPATCH pDisp,long lId)
{
m_map[lId] = pDisp;
pDisp->AddRef();
}
HRESULT Remove(long lId)
{
std::map<long,LPDISPATCH>::iterator ItemInMap = m_map.find(lId);
if (ItemInMap != m_map.end()){
ItemInMap->second->Release();
m_map.erase(ItemInMap);
}
}
HRESULT RemoveByNum(long idx)
{
std::map<long,LPDISPATCH>::iterator ItemInMap = m_map.begin();
std::advance(ItemInMap,idx);
ItemInMap->second->Release();
m_map.erase(ItemInMap);
}
HRESULT RemoveByRef(LPDISPATCH pDisp)
{
//тут перечислением находишь элемент и убиваешь его как в примерах выше.
}
Обработка ошибок опущена, пример писал "на коленках".