컴퓨터 공부/COM&ActiveX

[6월 15일 2교시] ATL 1

려리군 2009. 6. 15. 10:53

ATL(Active Template Library)

 - C++ template을 사용하여 작성된 클래스 라이브러리.

※ Template은 형틀(뼈대)이라는 뜻이기 때문에 <int>와 같이 type을 지정해 주어야 컴파일하여 instance화 될 수 있다. -> 필요한 부분만 instance화 되기 때문에 가볍다.

 - IUnknown, IClassFactory 등에 인터페이스에 대한 코드 구현

 - 작고 빠르고 확장성을 갖는 COM 개체 구현

※ MFC로 작성된 OCX파일은 관련 라이브러리도 같이 배포해야 한다.

(UI는 빈약, 통신용, 암호화 프로그램에 적합)


※ ATL라이브러리는 자동으로 레지스트리에 등록한다.


ATL 단순 개체 마법사

쓰레딩 모델 : 단일, 아파트...

이중(dual) : 자동화를 지원하는가?

집합체 : aggregatable이면 예, 아니면 아니요. 전용(aggregation만 한다.)


interface IAddBack : IDispatch{

// 원하는 메소드들을 정의한다.

};

coclass : 컴포넌트 객체에 대한 지원되는 인터페이스에 대한 목록을 제공.


ATL Base클래스 헤더

class ATL_NO_VTABLE CAddBack : 

public CComObjectRootEx<CComSingleThreadModel>, // Threading model

public CComCoClass<CAddBack, &CLSID_AddBack>, // ClassFactory

public IDispatchImpl<IAddBack, &IID_IAddBack, &LIBID_ATLtestLib, /*wMajor =*/ 1, /*wMinor =*/ 0>

// 자동화 객체 구현 클래스

...(생략)

BEGIN_COM_MAP(CAddBack) // Query Interface

COM_INTERFACE_ENTRY(IAddBack)

COM_INTERFACE_ENTRY(IDispatch) // 클라이언트는 VB로도 작성 가능.(자동화 인터페이스 등록)

END_COM_MAP()

...(생략)

OBJECT_ENTRY_AUTO(__uuidof(AddBack), CAddBack) // CLSID가 맞으면 클래스를 instance화 한다.


※ rgs : 레지스트리 등록할 때 사용하는 파일.