CComObject 클래스
이 클래스는 IUnknown
집계되지 않은 개체에 대해 구현합니다.
구문
template<class Base>
class CComObject : public Base
매개 변수
Base
CComObjectRoot 또는 CComObjectRootEx에서 파생된 클래스와 개체에서 지원하려는 다른 인터페이스에서 파생됩니다.
멤버
공용 생성자
속성 | 설명 |
---|---|
CComObject::CComObject | 생성자입니다. |
CComObject::~CComObject | 소멸자입니다. |
공용 메서드
이름 | 설명 |
---|---|
CComObject::AddRef | 개체에 대한 참조 수를 증분합니다. |
CComObject::CreateInstance | (정적) 새 CComObject 개체를 만듭니다. |
CComObject::QueryInterface | 요청된 인터페이스에 대한 포인터를 검색합니다. |
CComObject::Release | 개체의 참조 수를 줄입니다. |
설명
CComObject
는 집계되지 않은 개체에 대해 IUnknown 을 구현합니다. 그러나 , AddRef
Release
및 에 대한 QueryInterface
호출은 .에 CComObjectRootEx
위임됩니다.
사용에 CComObject
대한 자세한 내용은 ATL COM 개체의 기본 사항 문서를 참조하세요.
상속 계층 구조
Base
CComObject
요구 사항
헤더: atlcom.h
CComObject::AddRef
개체에 대한 참조 수를 증분합니다.
STDMETHOD_(ULONG, AddRef)();
Return Value
이 함수는 개체에 대한 새 증분 참조 수를 반환합니다. 이 값은 진단 또는 테스트에 유용할 수 있습니다.
CComObject::CComObject
생성자는 모듈 잠금 수를 증가합니다.
CComObject(void* = NULL);
매개 변수
비우다*
[in] 이 명명되지 않은 매개 변수는 사용되지 않습니다. 다른 CComXXXObjectXXX
생성자와 대칭을 위해 존재합니다.
설명
소멸자가 감소합니다.
연산자를 CComObject
사용하여 파생 개체를 new
성공적으로 생성한 경우 초기 참조 수는 0입니다. 참조 수를 적절한 값(1)으로 설정하려면 AddRef 함수를 호출합니다.
CComObject::~CComObject
소멸자입니다.
CComObject();
설명
할당된 모든 리소스를 해제하고 FinalRelease를 호출하며 모듈 잠금 수를 줄입니다.
CComObject::CreateInstance
이 정적 함수를 사용하면 CoCreateInstance의 오버헤드 없이 새 CComObjectBase
>< 개체를 만들 수 있습니다.
static HRESULT WINAPI CreateInstance(CComObject<Base>** pp);
매개 변수
pp
[out] CComObject<>Base
포인터에 대한 포인터입니다. 실패하면 CreateInstance
pp가 NULL로 설정됩니다.
Return Value
표준 HRESULT 값입니다.
설명
반환된 개체의 참조 개수는 0이므로 즉시 호출 AddRef
한 다음 완료되면 개체 포인터에 대한 참조를 해제하는 데 사용합니다 Release
.
개체에 직접 액세스할 필요가 없지만 오버헤드 CoCreateInstance
없이 새 개체를 만들려면 CComCoClass::CreateInstance를 대신 사용합니다.
예시
class ATL_NO_VTABLE CMyCircle :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CMyCircle, &CLSID_MyCircle>,
public IDispatchImpl<IMyCircle, &IID_IMyCircle, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
{
public:
CMyCircle()
{
}
DECLARE_REGISTRY_RESOURCEID(IDR_MYCIRCLE)
DECLARE_NOT_AGGREGATABLE(CMyCircle)
BEGIN_COM_MAP(CMyCircle)
COM_INTERFACE_ENTRY(IMyCircle)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
void FinalRelease()
{
}
public:
public:
STDMETHOD(get_XCenter)(double* pVal);
};
// Create a local instance of COM object CMyCircle.
double x;
CComObject<CMyCircle>* pCircle;
HRESULT hRes = CComObject<CMyCircle>::CreateInstance(&pCircle);
ATLASSERT(SUCCEEDED(hRes));
// Increment reference count immediately
pCircle->AddRef();
// Access method of COM object
hRes = pCircle->get_XCenter(&x);
// Decrement reference count when done
pCircle->Release();
pCircle = NULL;
CComObject::QueryInterface
요청된 인터페이스에 대한 포인터를 검색합니다.
STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject);
template <class Q>
HRESULT STDMETHODCALLTYPE QueryInterface(Q** pp);
매개 변수
iid
[in] 요청되는 인터페이스의 식별자입니다.
ppvObject
[out] iid로 식별되는 인터페이스 포인터에 대한 포인터입니다. 개체가 이 인터페이스 를 지원하지 않으면 ppvObject 가 NULL로 설정됩니다.
pp
[out] 형식 Q
으로 식별되는 인터페이스 포인터에 대한 포인터입니다. 개체가 이 인터페이스 를 지원하지 않는 경우 pp 는 NULL로 설정됩니다.
Return Value
표준 HRESULT 값입니다.
CComObject::Release
개체의 참조 수를 줄입니다.
STDMETHOD_(ULONG, Release)();
Return Value
이 함수는 개체에 대한 새 감소된 참조 수를 반환합니다. 디버그 빌드에서 반환 값은 진단 또는 테스트에 유용할 수 있습니다. 디버그가 아닌 빌드에서는 항상 0을 반환합니다 Release
.
참고 항목
CComAggObject 클래스
CComPolyObject 클래스
DECLARE_AGGREGATABLE
DECLARE_NOT_AGGREGATABLE
클래스 개요