Jak agregačních objektu COM s ATL

Překlady článku Překlady článku
ID článku: 173823 - Produkty, které se vztahují k tomuto článku.
Poznámka: Microsoft Visual C++ .NET (2002) podporuje model spravovaný kód, který je součástí Microsoft .NET Framework a Nespravovaná nativní kód modelu Microsoft Windows. Informace v tomto článku platí pouze pro nespravované kód jazyka C++.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Následující kroky ukazují, jak agregační COM objektu ATL projektu:
  1. Přidat ukazatel IUnknown objekt třídy a inicializovat NULL v konstruktoru.
  2. Přidat makro DECLARE_PROTECT_FINAL_CONSTRUCT chránit vaše objekt odstraňována Pokud (během FinalConstruct) interní agregované objekt zvýší počet odkazů potom sníží počet 0.

    Poznámka: Pokud používáte Visual C++ .NET průvodce tento přidá pro vás.
  3. Pomocí ukazatele IUnknown definován jako druhý parametr makra COM_INTERFACE_ENTRY_AGGREGATE. První parametr je IID rozhraní vnitřní objekt, který chcete vystavit.
  4. Přepsat FinalConstruct() vytvořit souhrn.
  5. Přepsat FinalRelease() uvolněte IUnknown ukazatel.

Další informace

Pokud pomocí a uvolnění rozhraní z souhrn během FinalConstruct byste přidat makro DECLARE_PROTECT_FINAL_CONSTRUCT definici třídy objektu.

Zde je příklad s všechny čtyři kroky provést v definici třídy. Toto je jednoduchý objekt COutObj, který agreguje jiného objektu jednoduché, CInnObj.

Ukázkový kód

   class ATL_NO_VTABLE COutObj :
         public CComObjectRootEx<CComSingleThreadModel>,
         public CComCoClass<COutObj, &CLSID_OutObj>,
         public IDispatchImpl<IOutObj, &IID_IOutObj, &LIBID_OUTEROBJLib>
   {
   public:
      COutObj() : m_pInnerUnk(NULL) // Step 1
      {
      }
      DECLARE_GET_CONTROLLING_UNKNOWN()
      DECLARE_REGISTRY_RESOURCEID(IDR_OUTOBJ)
      DECLARE_PROTECT_FINAL_CONSTRUCT() // Step 2

      BEGIN_COM_MAP(COutObj)
         COM_INTERFACE_ENTRY(IOutObj)
         COM_INTERFACE_ENTRY(IDispatch)
         COM_INTERFACE_ENTRY_AGGREGATE(IID_IInnObj, m_pInnerUnk) // Step 3
      END_COM_MAP()

      // Start of step 4
      HRESULT FinalConstruct()
      {
         HRESULT hr;
         CLSID   clsidInner;

         hr = CLSIDFromProgID(L"InnObj.InnObj.1", &clsidInner);
         if (hr == S_OK)
            hr = CoCreateInstance(clsidInner, GetControllingUnknown(),
                                  CLSCTX_INPROC_SERVER, IID_IUnknown,
                                  (void**)&m_pInnerUnk);
         return hr;
      } // End of step 4

      void FinalRelease(){m_pInnerUnk->Release();} // Step 5

      // IOutObj
   public:
      STDMETHOD(Test)();
   private:
      LPUNKNOWN m_pInnerUnk; // Step 1
   };
				
Pokud je vnitřní objekt v stejný server ATL poté vytvořit vnitřní objekt bez CoCreateInstance můžete použít následující kód:
   HRESULT FinalConstruct()
      {
         return  CInnObj::_CreatorClass::CreateInstance(
             GetControllingUnknown(), IID_IUnknown,
             (void**)&m_pInnerUnk);

      }
				

Odkazy

Visual C++ Online knihy: Knihy Visual C++; jazyk C/C++ a C++ Library knihovnu Active šablony článků; Úvod COM a ATL; Úvod COM; agregace

Visual C++ Online knihy: Knihy Visual C++; jazyk C/C++ a C++ Library Active knihovna šablony článků; základy ATL objektů COM; vytvoření agregační

Vlastnosti

ID článku: 173823 - Poslední aktualizace: 29. června 2004 - Revize: 3.1
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft ActiveX Template Library 3.0 na těchto platformách
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 5.0 Professional Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
    • Microsoft Visual C++ .NET 2002 Standard Edition
    • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft ActiveX Template Library 2.1 na těchto platformách
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 5.0 Professional Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
    • Microsoft Visual C++ .NET 2002 Standard Edition
    • Microsoft Visual C++ .NET 2003 Standard Edition
Klíčová slova: 
kbmt kbarchitecture kbhowto KB173823 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:173823

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com