CComPolyObject Sınıfı

Bu sınıf, toplanmış veya toplanmamış bir nesne için uygular IUnknown .

Sözdizimi

template<class contained>
class CComPolyObject : public IUnknown,
      public CComObjectRootEx<contained::_ThreadModel::ThreadModelNoCS>

Parametreler

Bulunan
Sınıfınız, CComObjectRoot veya CComObjectRootEx'ten ve nesne üzerinde desteklemek istediğiniz diğer arabirimlerden türetilir.

Üyeler

Ortak Oluşturucular

Veri Akışı Adı Açıklama
CComPolyObject::CComPolyObject Oluşturucu.
CComPolyObject::~CComPolyObject Yok edici.

Genel Yöntemler

Veri Akışı Adı Açıklama
CComPolyObject::AddRef Nesnenin başvuru sayısını artırır.
CComPolyObject::CreateInstance (Statik) CoCreateInstance yükü olmadan yeni bir CComPolyObject contained ><nesnesi oluşturmanıza olanak tanır.
CComPolyObject::FinalConstruct öğesinin son başlatma işlemini m_containedgerçekleştirir.
CComPolyObject::FinalRelease son yok etme işlemini m_containedgerçekleştirir.
CComPolyObject::QueryInterface İstenen arabirim için bir işaretçi alır.
CComPolyObject::Release Nesnenin başvuru sayısını azaltma.

Ortak Veri Üyeleri

Veri Akışı Adı Açıklama
CComPolyObject::m_contained Temsilciler IUnknown , nesne toplanırsa dış bilinmeyene IUnknown veya nesne toplanmazsa nesnenin öğesine çağrılar.

Açıklamalar

CComPolyObjecttoplanan veya toplanmamış bir nesne için IUnknown uygular.

Bir örneği CComPolyObject oluşturulduğunda, dış bilinmeyenin değeri denetlener. NULL ise, IUnknown toplama yapılmamış bir nesne için uygulanır. Dış bilinmeyen NULL değilse, IUnknown toplanan nesne için uygulanır.

Kullanmanın CComPolyObject avantajı, toplanan ve toplanmamış durumları işlemek için modülünüzde hem CComAggObject hem de CComObject olmasını önlemenizdir. Tek CComPolyObject bir nesne her iki durumu da işler. Bu, modülünüzde vtable'ın yalnızca bir kopyası ve işlevlerin bir kopyası olduğu anlamına gelir. Vtable'ınız büyükse bu, modülünüzün boyutunu önemli ölçüde azaltabilir. Ancak, vtable'ınız küçükse ve CComPolyObject gibi toplanmış veya toplanmamış bir nesne için iyileştirilmediğinden kullanarak CComAggObject CComObjectmodül boyutu biraz daha büyük olabilir.

nesnenizin sınıf tanımında DECLARE_POLY_AGGREGATABLE makro belirtilirse, CComPolyObject nesnenizi oluşturmak için kullanılır. Tam denetim veya Internet Explorer denetimi oluşturmak için ATL Proje Sihirbazı'nı kullanırsanız DECLARE_POLY_AGGREGATABLE otomatik olarak bildirilecektir.

Toplanmışsa, nesnenin CComPolyObject dış nesnenin IUnknownöğesinden ayrı olarak kendi IUnknownnesnesi vardır ve kendi başvuru sayısını korur. CComPolyObjectdış bilinmeyene temsilci seçmek için CComContainedObject kullanır.

Toplama hakkında daha fazla bilgi için ATL COM Nesnelerinin Temelleri makalesine bakın.

Devralma Hiyerarşisi

CComObjectRootBase

CComObjectRootEx

IUnknown

CComPolyObject

Gereksinimler

Üst bilgi: atlcom.h

CComPolyObject::AddRef

Nesnedeki başvuru sayısını artırır.

STDMETHOD_(ULONG, AddRef)();

Dönüş Değeri

Tanılama veya test için yararlı olabilecek bir değer.

CComPolyObject::CComPolyObject

Oluşturucu.

CComPolyObject(void* pv);

Parametreler

Pv
[in] Nesne toplanacaksa dışta bilinmeyen bir işaretçi veya nesne toplanmazsa NULL.

Açıklamalar

Veri üyesini CComContainedObject başlatır, m_contained ve modül kilit sayısını artırır.

Yıkıcı, modül kilit sayısını azalmış.

CComPolyObject::~CComPolyObject

Yok edici.

~CComPolyObject();

Açıklamalar

Ayrılan tüm kaynakları serbest bırakma, FinalRelease çağrısı yapma ve modül kilitleme sayısını azaltma.

CComPolyObject::CreateInstance

CoCreateInstance yükü olmadan yeni bir CComPolyObjectcontained>< nesnesi oluşturmanıza olanak tanır.

static HRESULT WINAPI CreateInstance(
    LPUNKNOWN pUnkOuter,
    CComPolyObject<contained>** pp);

Parametreler

Pp
[out] CComPolyObject işaretçisi işaretçisi<contained>. Başarısız olursa CreateInstance , pp null olarak ayarlanır.

Dönüş Değeri

Standart bir HRESULT değeri.

Açıklamalar

Döndürülen nesnenin başvuru sayısı sıfır olduğundan hemen çağırın AddRef , ardından Release işiniz bittiğinde nesne işaretçisinde başvuruyu serbest bırakın.

Nesnesine doğrudan erişime ihtiyacınız yoksa ancak yine de yükü CoCreateInstanceolmadan yeni bir nesne oluşturmak istiyorsanız, bunun yerine CComCoClass::CreateInstance kullanın.

CComPolyObject::FinalConstruct

Nesne oluşturmanın son aşamaları sırasında çağrılan bu yöntem, m_contained veri üyesi üzerinde herhangi bir son başlatma gerçekleştirir.

HRESULT FinalConstruct();

Dönüş Değeri

Standart bir HRESULT değeri.

CComPolyObject::FinalRelease

Nesne yok etme sırasında çağrılan bu yöntem, m_contained veri üyesini serbest getirir.

void FinalRelease();

CComPolyObject::m_contained

Sınıfınızdan türetilmiş bir CComContainedObject nesnesi.

CComContainedObject<contained> m_contained;

Parametreler

Bulunan
[in] Sınıfınız, CComObjectRoot veya CComObjectRootEx'ten ve nesne üzerinde desteklemek istediğiniz diğer arabirimlerden türetilir.

Açıklamalar

IUnknown üzerinden m_contained çağrılar, nesne toplanırsa dış bilinmeyene IUnknown veya nesne toplanmazsa bu nesnenin adına temsilci olarak gönderilir.

CComPolyObject::QueryInterface

İstenen arabirim için bir işaretçi alır.

STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);
template <class Q>
HRESULT QueryInterface(Q** pp);

Parametreler

Q
COM arabirimi.

iid
[in] İstenen arabirimin tanımlayıcısı.

ppvObject
[out] iid ile tanımlanan arabirim işaretçisinin işaretçisi. Nesne bu arabirimi desteklemiyorsa, ppvObject NULL olarak ayarlanır.

Pp
[out] tarafından __uuidof(Q)tanımlanan arabirim işaretçisi.

Dönüş Değeri

Standart bir HRESULT değeri.

Açıklamalar

Toplanan bir nesne için, istenen arabirim ise IUnknown, QueryInterface toplanan nesnenin kendi IUnknown işaretçisini döndürür ve başvuru sayısını artırır. Aksi takdirde, bu yöntem m_contained veri üyesi aracılığıyla CComContainedObject arabirimi sorgular.

CComPolyObject::Release

Nesnedeki başvuru sayısını azaltma.

STDMETHOD_(ULONG, Release)();

Dönüş Değeri

Hata ayıklama derlemelerinde, Release tanılama veya test için yararlı olabilecek bir değer döndürür. Plansız derlemelerde Release her zaman 0 döndürür.

Ayrıca bkz.

CComObjectRootEx Sınıfı
DECLARE_POLY_AGGREGATABLE
Sınıfa Genel Bakış