class TEvents_DetailedZodiac :
   public IConnectionPointImpl<T,
           &IID_IDetailedZodiacEvents,
           CComDynamicUnkArray>
{
   public:
   HRESULT Fire_OnDetailedZodiacSignReady(TDetailedZodiacSign* DetailedSign)
   {
      T * pT = (T*)this;
      pT->Lock();
      IUnknown ** pp = m_vec.begin();
      while (pp < m_vec.end())
      {
         if (*pp != NULL)
         {
            CComQIPtr<IDetailedZodiacEvents, &IID_IDetailedZodiacEvents> ptrEvents = *pp;
            if (ptrEvents != NULL)
               ptrEvents->OnDetailedZodiacSignReady(DetailedSign);
         }
         pp++;
     }
     pT->Unlock();

     return S_OK;
   }
};
