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
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에서 파생된 클래스와 개체에서 지원하려는 다른 인터페이스에서 파생됩니다.
설명
IUnknown
m_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 값입니다.
설명
집계된 개체의 경우 요청된 인터페이스인 IUnknown
QueryInterface
경우 집계된 개체 자체 IUnknown
에 대한 포인터를 반환하고 참조 수를 증분합니다. 그렇지 않으면 이 메서드는 데이터 멤버를 통해 인터페이스를 CComContainedObject
쿼리하고 m_contained.
CComPolyObject::Release
개체의 참조 수를 줄입니다.
STDMETHOD_(ULONG, Release)();
Return Value
디버그 빌드 Release
에서 진단 또는 테스트에 유용할 수 있는 값을 반환합니다. 비지정 빌드에서는 항상 0을 반환합니다 Release
.