다음을 통해 공유


ATL COM 개체 기본 사항

다음 그림에서는 ATL COM 개체를 정의하는 데 사용되는 클래스와 인터페이스 간의 관계를 보여 줍니다.

Diagram of the classes and interfaces used to define an A T L object.

참고 항목

이 다이어그램은 파생된 반면 CComAggObject 멤버 변수로 포함 CYourClass 되는 것을 보여줍니다CComObject.CComPolyObject CYourClass

ATL COM 개체를 정의하는 방법에는 세 가지가 있습니다. 표준 옵션은 .에서 CYourClass파생된 클래스를 CComObject 사용하는 것입니다. 두 번째 옵션은 클래스를 사용하여 집계된 개체를 만드는 것입니다 CComAggObject . 세 번째 옵션은 클래스를 사용하는 것입니다 CComPolyObject . CComPolyObject는 하이브리드로 작동합니다. 처음 만드는 방법에 따라 클래스 또는 클래스로 CComAggObject 작동 CComObject 할 수 있습니다. 클래스를 사용하는 CComPolyObject 방법에 대한 자세한 내용은 CComPolyObject 클래스를 참조 하세요.

표준 ATL COM을 사용하는 경우 외부 개체와 내부 개체의 두 개체를 사용합니다. 외부 클라이언트는 외부 개체에 정의된 래퍼 함수를 통해 내부 개체의 기능에 액세스합니다. 외부 개체의 형식 CComObject입니다.

집계된 개체를 사용하는 경우 외부 개체는 내부 개체의 기능에 대한 래퍼를 제공하지 않습니다. 대신 외부 개체는 외부 클라이언트에서 직접 액세스하는 포인터를 제공합니다. 이 시나리오에서 외부 개체는 형식 CComAggObject입니다. 내부 개체는 외부 개체의 멤버 변수이며 형식 CYourClass입니다.

클라이언트가 내부 개체와 상호 작용하기 위해 외부 개체를 통과할 필요가 없으므로 집계된 개체가 일반적으로 더 효율적입니다. 또한 집계된 개체의 인터페이스를 클라이언트에서 직접 사용할 수 있다는 점을 감안할 때 외부 개체는 집계된 개체의 기능을 알 필요가 없습니다. 그러나 모든 개체를 집계할 수 있는 것은 아닙니다. 개체를 집계하려면 집계를 염두에 두고 설계해야 합니다.

ATL은 다음 두 단계로 IUnknown 을 구현합니다.

ATL COM 개체의 다른 측면은 다른 클래스에서 처리됩니다.

  • CComCoClass 는 개체의 기본 클래스 팩터리 및 집계 모델을 정의합니다.

  • IDispatchImpl 은 개체의 IDispatch Interface 모든 이중 인터페이스 부분에 대한 기본 구현을 제공합니다.

  • ISupportErrorInfoImplISupportErrorInfo 오류 정보를 호출 체인으로 올바르게 전파할 수 있도록 하는 인터페이스를 구현합니다.

섹션 내용

CComObjectRootEx 구현
를 구현하기 위한 예제 COM 맵 항목을 표시합니다 CComObjectRootEx.

CComObject, CComAggObject 및 CComPolyObject 구현
DECLARE_*_AGGREGATABLE 매크로가 , CComAggObjectCComPolyObjectCComObject사용에 미치는 영향에 대해 설명합니다.

IDispatch 및 IErrorInfo 지원
IErrorInfo 인터페이스를 지원하는 데 사용할 ATL 구현 클래스를 IDispatch 나열합니다.

IDispEventImpl 지원
클래스에 대한 연결 지점을 구현하는 단계에 대해 설명합니다.

기본 클래스 팩터리 및 집계 모델 변경
기본 클래스 팩터리 및 집계 모델을 변경하는 데 사용할 매크로를 표시합니다.

집계 개체 만들기
집계된 개체를 만드는 단계를 나열합니다.

ATL 프로젝트 만들기
ATL COM 개체를 만드는 방법에 대한 정보를 제공합니다.

Atl
액티브 템플릿 라이브러리를 사용하여 프로그래밍하는 방법에 대한 개념 항목의 링크를 제공합니다.

참고 항목

개념