Aracılığıyla paylaş


CComObjectRootEx::FinalConstruct

Bu yöntem, nesneniz için gerekli gerçekleþtirmekiçin, türetilmiş bir sınıf içinde kılabilirsiniz.

HRESULT FinalConstruct( );

Dönüş Değeri

Return S_OK başarı veya standart hata HRESULT değerler.

Notlar

Varsayılan olarak, CComObjectRootEx::FinalConstruct basitçe döndüren S_OK.

Başlatma gerçekleştiriliyor yararları vardır FinalConstruct sınıfının yapıcı değil:

  • Bir durum kodu bir kurucusundan döndüremez, ancak geri döndürülebilir bir HRESULT , FinalConstruct's dönüş değeri.atl tarafından sağlanan standart sınıf üreteci kullanarak sınıfının nesneleri oluşturuluyor, bu dönüş değeri ile ayrıntılı hata bilgileri girmenize olanak sağlayarak com istemcisi yayılır.

  • Bir sınıfın yapıcısını karşı sanal işlevi mekanizması aracılığıyla sanal işlevleri çağıramazsınız.Devralma hiyerarşisinde o noktada tanımlanan sanal işlevi bir sınıf kurucusundan çağırmak statik olarak çözümlenen bir işlevi çağrısı sonuçlanır.Saf sanal işlev çağrıları linker hatalara neden.

    Sınıfınızın Devralma hiyerarşisinde en türetilmiş bir sınıf değil — bazı işlevselliği sağlamak için atl tarafından sağlanan türetilmiş bir sınıf güvenir.Bilgisayarınızı başlatma (sınıfının nesneleri diğer nesnelere toplamak gerektiğinde bu kesinlikle doğrudur) o sınıf tarafından sağlanan özelliklerini kullanmak için gereksinim duyacağınız bir yerlerde bulunma şansı yoktur, ancak hiçbir şekilde bu özelliklere erişmek için kullanacağınız sınıf yapıcısında sahiptir.Tam olarak en türetilmiş bir sınıf oluşturulur önce sınıfınız için yapım kodu yürütülür.

    Ancak, FinalConstruct sonra en türetilmiş sınıf tamamen sanal işlevlerini çağıran ve bileşene ATL tarafından sağlanan başvuru sayma uygulaması kullanmanıza olanak sağlayarak oluşturulur hemen verilir

Örnek

Tipik olarak, bu yöntem türetilen sınıfta geçersiz kılmak CComObjectRootEx herhangi oluşturmak için nesneleri birikir.Örne?in:

class ATL_NO_VTABLE CMyAggObject :
   public CComObjectRootEx<CComSingleThreadModel>,
   public CComCoClass<CMyAggObject, &CLSID_MyAggObject>,
   public IDispatchImpl<IMyAggObject, &IID_IMyAggObject, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
   DECLARE_GET_CONTROLLING_UNKNOWN()
   HRESULT FinalConstruct()
   {
      return CoCreateInstance(CLSID_MyCustomClass, GetControllingUnknown(), 
         CLSCTX_ALL, IID_IUnknown, (void**)&m_pMyCustomClass);
   }

   IMyCustomClass* m_pMyCustomClass;

   // Remainder of class declaration omitted.

İşlem başarısız olursa, bir hata döndürebilir.Makroyu kullanmak DECLARE_PROTECT_FINAL_CONSTRUCT dış nesnenizin sıralanmasını korumak için oluşturma sırasında iç toplanan nesne başvuru sayısı sonra azaltır sayısı 0 değerini artırır, silinmiş.

Toplama oluşturmak için tipik bir yol da şudur:

  • Ekleme bir IUnknown sınıfınız için işaretçi nesne ve başlatmak için null oluşturucuda.

  • Geçersiz kılma FinalConstruct toplama oluşturmak için.

  • Use IUnknown İşaretçi parametresi olarak tanımlanan COM_INTERFACE_ENTRY_AGGREGATE makro.

  • Geçersiz kılma FinalRelease serbest bırakmak için IUnknown işaretçisi.

Gereksinimler

Başlık: atlcom.h

Ayrıca bkz.

Başvuru

CComObjectRootEx sınıfı

CComObjectRootEx::FinalRelease

DECLARE_GET_CONTROLLING_UNKNOWN