다음을 통해 공유


CComPolyObject 클래스

이 클래스는 IUnknown 집계되거나 집계되지 않은 개체에 대해 구현됩니다.

구문

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

매개 변수

contained
CComObjectRoot 또는 CComObjectRootEx에서 파생된 클래스와 개체에서 지원하려는 다른 인터페이스에서 파생됩니다.

멤버

공용 생성자

속성 설명
CComPolyObject::CComPolyObject 생성자입니다.
CComPolyObject::~CComPolyObject 소멸자입니다.

공용 메서드

이름 설명
CComPolyObject::AddRef 개체의 참조 수를 증분합니다.
CComPolyObject::CreateInstance (정적) CoCreateInstance의 오버헤드 없이 새 CComPolyObject contained ><개체를 만들 수 있습니다.
CComPolyObject::FinalConstruct 의 최종 초기화를 m_contained수행합니다.
CComPolyObject::FinalRelease 의 최종 소멸을 수행합니다 m_contained.
CComPolyObject::QueryInterface 요청된 인터페이스에 대한 포인터를 검색합니다.
CComPolyObject::Release 개체의 참조 수를 줄입니다.

공용 데이터 멤버

속성 설명
CComPolyObject::m_contained 대리자는 IUnknown 개체가 집계된 경우 알 수 없는 외부를 호출하거나 IUnknown 개체가 집계되지 않은 경우 개체를 호출합니다.

설명

CComPolyObject집계되거나 집계되지 않은 개체에 대해 IUnknown 을 구현합니다.

인스턴스 CComPolyObject 가 만들어지면 알 수 없는 외부의 값이 선택됩니다. NULL IUnknown 인 경우 집계되지 않은 개체에 대해 구현됩니다. 알 수 없는 외부가 NULL IUnknown 이 아니면 집계된 개체에 대해 구현됩니다.

CComPolyObject 듈에서 CComAggObject와 CComObject를 모두 사용하여 집계된 사례와 집계되지 않은 사례를 처리하지 않도록 할 수 있다는 장점이 있습니다. 단일 CComPolyObject 개체는 두 경우를 모두 처리합니다. 즉, vtable의 복사본 하나와 함수의 복사본 하나만 모듈에 존재합니다. vtable이 크면 모듈 크기를 크게 줄일 수 있습니다. 그러나 vtable이 작으면 집계된 개체나 집계되지 않은 개체에 대해 최적화되지 않으므로 모 CComPolyObject 듈 크기를 약간 더 크게 만들 수 있습니다 CComAggObject CComObject.

DECLARE_POLY_AGGREGATABLE 매크로가 개체의 클래스 정의 CComPolyObject 에 지정된 경우 개체를 만드는 데 사용됩니다. ATL 프로젝트 마법사를 사용하여 모든 권한 또는 Internet Explorer 컨트롤을 만드는 경우 DECLARE_POLY_AGGREGATABLE 자동으로 선언됩니다.

집계된 CComPolyObject 경우 개체는 외부 개체와 분리된 고유한 IUnknown개체 IUnknown를 가지며 자체 참조 수를 유지 관리합니다. CComPolyObject에서는 CComContainedObject를 사용하여 알 수 없는 외부에 위임합니다.

집계에 대한 자세한 내용은 ATL COM 개체의 기본 사항 문서를 참조하세요.

상속 계층 구조

CComObjectRootBase

CComObjectRootEx

IUnknown

CComPolyObject

요구 사항

헤더: atlcom.h

CComPolyObject::AddRef

개체에 대한 참조 수를 증분합니다.

STDMETHOD_(ULONG, AddRef)();

Return Value

진단 또는 테스트에 유용할 수 있는 값입니다.

CComPolyObject::CComPolyObject

생성자입니다.

CComPolyObject(void* pv);

매개 변수

pv
[in] 개체를 집계할 것인지 알 수 없는 외부에 대한 포인터이거나, 개체가 집계되지 않은 경우 NULL입니다.

설명

M_containedCComContainedObject데이터 멤버를 초기화하고 모듈 잠금 수를 늘립니다.

소멸자가 모듈 잠금 수를 감소합니다.

CComPolyObject::~CComPolyObject

소멸자입니다.

~CComPolyObject();

설명

할당된 모든 리소스를 해제하고 FinalRelease를 호출하며 모듈 잠금 수를 줄입니다.

CComPolyObject::CreateInstance

CoCreateInstance의 오버헤드 없이 새 CComPolyObjectcontained>< 개체를 만들 수 있습니다.

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

매개 변수

pp
[out] CComPolyObject> contained<포인터에 대한 포인터입니다. 실패하면 CreateInstance pp가 NULL로 설정됩니다.

Return Value

표준 HRESULT 값입니다.

설명

반환된 개체의 참조 개수는 0이므로 즉시 호출 AddRef 한 다음 완료되면 개체 포인터에 대한 참조를 해제하는 데 사용합니다 Release .

개체에 직접 액세스할 필요가 없지만 오버헤드 CoCreateInstance없이 새 개체를 만들려면 CComCoClass::CreateInstance를 대신 사용합니다.

CComPolyObject::FinalConstruct

개체 생성의 마지막 단계에서 호출되는 이 메서드는 m_contained 데이터 멤버에 대한 최종 초기화를 수행합니다.

HRESULT FinalConstruct();

Return Value

표준 HRESULT 값입니다.

CComPolyObject::FinalRelease

개체를 파기하는 동안 호출된 이 메서드는 m_contained 데이터 멤버를 해제합니다.

void FinalRelease();

CComPolyObject::m_contained

클래스에서 파생된 CComContainedObject 개체입니다.

CComContainedObject<contained> m_contained;

매개 변수

contained
[in] CComObjectRoot 또는 CComObjectRootEx에서 파생된 클래스와 개체에서 지원하려는 다른 인터페이스에서 파생됩니다.

설명

IUnknownm_contained 호출은 개체가 집계된 경우 알 수 없는 외부로 위임되거나 개체 IUnknown 가 집계되지 않은 경우 이 개체에 위임됩니다.

CComPolyObject::QueryInterface

요청된 인터페이스에 대한 포인터를 검색합니다.

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

매개 변수

Q
COM 인터페이스입니다.

iid
[in] 요청되는 인터페이스의 식별자입니다.

ppvObject
[out] iid로 식별되는 인터페이스 포인터에 대한 포인터입니다. 개체가 이 인터페이스 를 지원하지 않으면 ppvObject 가 NULL로 설정됩니다.

pp
[out] 로 식별되는 __uuidof(Q)인터페이스에 대한 포인터입니다.

Return Value

표준 HRESULT 값입니다.

설명

집계된 개체의 경우 요청된 인터페이스인 IUnknownQueryInterface 경우 집계된 개체 자체 IUnknown 에 대한 포인터를 반환하고 참조 수를 증분합니다. 그렇지 않으면 이 메서드는 데이터 멤버를 통해 인터페이스를 CComContainedObject 쿼리하고 m_contained.

CComPolyObject::Release

개체의 참조 수를 줄입니다.

STDMETHOD_(ULONG, Release)();

Return Value

디버그 빌드 Release 에서 진단 또는 테스트에 유용할 수 있는 값을 반환합니다. 비지정 빌드에서는 항상 0을 반환합니다 Release .

참고 항목

CComObjectRootEx 클래스
DECLARE_POLY_AGGREGATABLE
클래스 개요