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로 선언합니다.
클래스 정의에 다른 매크로를 지정하여 이러한 기본값 중 하나를 재정의할 수 있습니다. 예를 들어 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
lpszDesc가 LPCOLESTR 형식임을 지정하고 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 프로젝트 만들기 문서를 참조하세요.