다음을 통해 공유


CComCoClass 클래스

이 클래스는 클래스의 인스턴스를 만들고 해당 속성을 가져오는 메서드를 제공합니다.

구문

template <class T, const CLSID* pclsid = &CLSID_NULL>
class CComCoClass

매개 변수

T
에서 파생된 CComCoClass클래스입니다.

pclsid
개체의 CLSID에 대한 포인터입니다.

멤버

공용 메서드

이름 설명
CComCoClass::CreateInstance (정적) 인터페이스에 대한 클래스 및 쿼리의 인스턴스를 만듭니다.
CComCoClass::Error (정적) 클라이언트에 풍부한 오류 정보를 반환합니다.
CComCoClass::GetObjectCLSID (정적) 개체의 클래스 식별자를 반환합니다.
CComCoClass::GetObjectDescription (정적) 개체의 설명을 반환하도록 재정의합니다.

설명

CComCoClass 에서는 개체의 CLSID를 검색하고, 오류 정보를 설정하고, 클래스의 인스턴스를 만드는 메서드를 제공합니다. 개체 맵에 등록된 모든 클래스는 .에서 CComCoClass파생되어야 합니다.

CComCoClass 또한 개체에 대한 기본 클래스 팩터리 및 집계 모델을 정의합니다. CComCoClass 에서는 다음 두 개의 매크로를 사용합니다.

  • DECLARE_CLASSFACTORY 클래스 팩터리를 CComClassFactory선언합니다.

  • DECLARE_AGGREGATABLE 개체를 집계할 수 있음을 선언합니다.

클래스 정의에 다른 매크로를 지정하여 이러한 기본값 중 하나를 재정의할 수 있습니다. 예를 들어 CComClassFactory2 대신 CComClassFactory사용하려면 DECLARE_CLASSFACTORY2 매크로를 지정합니다.

class ATL_NO_VTABLE CMyClass2 :
   public CComObjectRootEx<CComSingleThreadModel>,
   public CComCoClass<CMyClass2, &CLSID_MyClass>,
   public IDispatchImpl<IMyClass, &IID_IMyClass, &LIBID_NVC_ATL_COMLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
   public IDispatchImpl<IMyDualInterface, &__uuidof(IMyDualInterface), &LIBID_NVC_ATL_COMLib, /* wMajor = */ 1, /* wMinor = */ 0>
{
public:
   DECLARE_CLASSFACTORY2(CMyLicense)

   // Remainder of class declaration omitted

요구 사항

헤더: atlcom.h

CComCoClass::CreateInstance

이러한 CreateInstance 함수를 사용하여 COM 개체의 인스턴스를 만들고 COM API를 사용하지 않고 인터페이스 포인터를 검색합니다.

template <class  Q>
static HRESULT CreateInstance( Q** pp);

template <class  Q>
static HRESULT CreateInstance(IUnknown* punkOuter, Q** pp);

매개 변수

Q
pp를 통해 반환해야 하는 COM 인터페이스입니다.

punkOuter
[in] 집계의 알 수 없거나 알 수 없는 외부입니다.

pp
[out] 생성에 성공하면 요청된 인터페이스 포인터를 수신하는 포인터 변수의 주소입니다.

Return Value

표준 HRESULT 값입니다. 가능한 반환 값에 대한 설명은 Windows SDK의 CoCreateInstance를 참조하세요.

설명

일반적인 개체 생성을 위해 이 함수의 첫 번째 오버로드를 사용합니다. 만들려는 개체를 집계해야 하는 경우 두 번째 오버로드를 사용합니다.

필요한 COM 개체를 구현하는 ATL 클래스(즉, CComCoClass에 대한 첫 번째 템플릿 매개 변수로 사용되는 클래스)는 호출 코드와 동일한 프로젝트에 있어야 합니다. COM 개체의 생성은 이 ATL 클래스에 등록된 클래스 팩터리에 의해 수행됩니다.

이러한 함수는 OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO 매크로를 사용하여 외부에서 만들 수 없는 개체를 만드는 데 유용합니다. 또한 효율성상의 이유로 COM API를 피하려는 상황에서도 유용합니다.

인터페이스 Q에는 __uuidof 연산자를 사용하여 검색할 수 있는 IID가 연결되어 있어야 합니다.

예시

다음 예제 CDocument 에서는 인터페이스를 구현하는 파생 CComCoClass 된 마법사 생성 ATL 클래스입니다 IDocument . 클래스는 OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO 매크로를 사용하여 개체 맵에 등록되므로 클라이언트는 CoCreateInstance를 사용하여 문서의 인스턴스를 만들 수 없습니다. CApplication 는 자체 COM 인터페이스 중 하나에 메서드를 제공하여 문서 클래스의 인스턴스를 만드는 CoClass입니다. 아래 코드는 기본 클래스에서 CComCoClass 상속된 멤버를 사용하여 문서 클래스의 인스턴스를 CreateInstance 쉽게 만드는 방법을 보여 줍니다.

STDMETHODIMP CMyApp::CreateDocument( /* [out, retval] */ IDocument** ppDoc)
{
   *ppDoc = NULL;
   return CMyDoc::CreateInstance(ppDoc);
}

CComCoClass::Error

이 정적 함수는 클라이언트에 IErrorInfo 오류 정보를 제공하도록 인터페이스를 설정합니다.

static HRESULT WINAPI Error(
    LPCOLESTR lpszDesc,
    const IID& iid = GUID_NULL,
    HRESULT hRes = 0);

static HRESULT WINAPI Error(
    LPCOLESTR lpszDesc,
    DWORD dwHelpID,
    LPCOLESTR lpszHelpFile,
    const IID& iid = GUID_NULL,
    HRESULT hRes = 0);

static HRESULT WINAPI Error(
    LPCSTR lpszDesc,
    const IID& iid = GUID_NULL,
    HRESULT hRes = 0);

static HRESULT WINAPI Error(
    LPCSTR lpszDesc,
    DWORD dwHelpID,
    LPCSTR lpszHelpFile,
    const IID& iid = GUID_NULL,
    HRESULT hRes = 0);

static HRESULT WINAPI Error(
    UINT nID,
    const IID& iid = GUID_NULL,
    HRESULT hRes = 0,
    HINSTANCE hInst = _AtlBaseModule.GetResourceInstance ());

static HRESULT Error(
    UINT nID,
    DWORD dwHelpID,
    LPCOLESTR lpszHelpFile,
    const IID& iid = GUID_NULL,
    HRESULT hRes = 0,
    HINSTANCE hInst = _AtlBaseModule.GetResourceInstance());

매개 변수

lpszDesc
[in] 오류를 설명하는 문자열입니다. 유니코드 버전은 Error lpszDescLPCOLESTR 형식임을 지정하고 ANSI 버전은 LPCSTR 형식을 지정합니다.

iid
[in] 오류를 정의하는 인터페이스의 IID이거나 운영 체제에서 오류를 정의한 경우 GUID_NULL(기본값)입니다.

hRes
[in] 호출자에게 반환하려는 HRESULT입니다. 기본값은 0입니다. hRes에 대한 자세한 내용은 비고를 참조하세요.

nID
[in] 오류 설명 문자열이 저장되는 리소스 식별자입니다. 이 값은 0x0200 0xFFFF 사이에 있어야 합니다. 디버그 빌드에서 nID가 유효한 문자열을 인덱싱하지 않으면 ASSERT가 발생합니다. 릴리스 빌드에서 오류 설명 문자열은 "알 수 없는 오류"로 설정됩니다.

dwHelpID
[in] 오류에 대한 도움말 컨텍스트 식별자입니다.

lpszHelpFile
[in] 오류를 설명하는 도움말 파일의 경로와 이름입니다.

hInst
[in] 리소스에 대한 핸들입니다. 기본적으로 이 매개 변수는 _AtlModule::GetResourceInstance_AtlModule CAtlModule전역 인스턴스입니다.

Return Value

표준 HRESULT 값입니다. 자세한 내용은 설명을 참조하세요.

설명

호출 Error하려면 개체가 인터페이스를 ISupportErrorInfo 구현해야 합니다.

hRes 매개 변수가 0 Error 이 아니면 hRes 값을 반환합니다. hRes가 0이면 처음 네 버전의 Error 반환이 DISP_E_EXCEPTION. 마지막 두 버전은 매크로 MAKE_HRESULT(1, FACILITY_ITF, nID)의 결과를 반환합니다.

CComCoClass::GetObjectCLSID

개체의 CLSID를 검색하는 일관된 방법을 제공합니다.

static const CLSID& WINAPI GetObjectCLSID();

Return Value

개체의 클래스 식별자입니다.

CComCoClass::GetObjectDescription

이 정적 함수는 클래스 개체에 대한 텍스트 설명을 검색합니다.

static LPCTSTR WINAPI GetObjectDescription();

Return Value

클래스 개체의 설명입니다.

설명

기본 구현은 NULL을 반환합니다. DECLARE_OBJECT_DESCRIPTION 매크로를 사용하여 이 메서드를 재정의할 수 있습니다. 예시:

class ATL_NO_VTABLE CMyDoc :
   public CComObjectRootEx<CComSingleThreadModel>,
   public CComCoClass<CMyDoc, &CLSID_MyDoc>,
   public IDocument
{
public:
   DECLARE_OBJECT_DESCRIPTION("My Document Object 1.0")

   // Remainder of class declaration omitted.

GetObjectDescription 가 호출됩니다 IComponentRegistrar::GetComponents. IComponentRegistrar 은 DLL에서 개별 구성 요소를 등록 및 등록 취소할 수 있는 Automation 인터페이스입니다. ATL 프로젝트 마법사를 사용하여 구성 요소 등록자 개체를 만들면 마법사에서 인터페이스를 IComponentRegistrar 자동으로 구현합니다. IComponentRegistrar 는 일반적으로 Microsoft Transaction Server에서 사용됩니다.

ATL 프로젝트 마법사에 대한 자세한 내용은 ATL 프로젝트 만들기 문서를 참조하세요.

참고 항목

클래스 개요