컴퓨터 공부/COM&ActiveX

[6월 15일 3교시] ATL2

려리군 2009. 6. 15. 11:09

인터페이스는 Interface, Property, Event를 제공할 수 있다.

※ idl->header->cpp 순서대로 구현해야 하며 idl파일이 제일 중요하다.


ATL 기초 클래스

CComObjectRootEx<CComObjectThreadModel>클래스

 - 쓰레딩 모델이 명시되는 템플릿 클래스

 - IUnknown 인터페이스의 내부와 delegate코드 제공.


CComCoClass 클래스

 - 클래스 팩토리 COM 개체 정의


CComObject 클래스

 - 사용자 COM 개체 클래스에서 파생된 새 클래스를 생성

 - 실제로 객체가 생성되는 부분. IUnknown의 메소드 재정의


idl 추가하는 방법

interface IAdd : IUnknown{


};

[

uuid(F441817D-5724-4314-BD71-E6C233974107),    // 도구->GUID만들기->Registry Format

version(1.0),

helpstring("IAdd 인터페이스")

]


coclass AddBack

{

[default] interface IAddBack;

interface IAdd;

};


Registrar(객체) 

실행시에 리소스를 해석하여 레지스트리를 수정하는 API 함수 호출

NoRemove : 기본적인 옵션은 지우지 말라는 뜻

ForceRemove : 해당 부분은 unregister시 (-u) 강제로 지운다. 


자동화 객체에서 사용하는 아이디

[propget, id(2), helpstring("속성 AddEnd")] HRESULT AddEnd([out, retval] SHORT* pVal);


ATL은 COM 인터페이스 포인터를 관리하기 위해 CComPtr과 CComQIPtr을 사용한다. 둘 다 CComPtrBase에서 파생되며 자동적으로 참조 카운트를 수행한다.

자동적인 참조 카운트를 수행함으로서 메모리 누수를 막을 수 있도록 한다. 


template<class T>

class CComPtr

COM 인터페이스 포인터를 관리하기 위한 스마트 포인터 클래스

T : 저장될 포인터 타입을 나타내는 COM 인터페이스

template<class T, const IID* piid = &__uuidof(T)>

class CComQIPtr: public CComPtr<T>

COM 인터페이스 포인터를 관리하기 위한 스마트 포인터 클래스

QueryInterface() 함수 호출의 리턴 값을 보여주지 않고 호출한다.

T : 저장될 포인터 타입을 나타내는 COM 인터페

이스

piid : T의 IID 포인터


ATL 데이터형 클래스

class CComBSTR

고정 길이 문자열인 BSTRs의 wrapper 클래스이다. 길이는 문자열의 데이터 제일 앞에 숫자로써 저장된다.

문자열 길이는 처음 null 문자가 아닌 문자열 숫자에 의해 결정된다.

class CComVariant:

union에서 보관된 데이터 타입을 나타내는 멤버변수와 union으로 구성되는 VARIANT와 VARIANTARG타입을 wrapping하는 클래스이다. VARIENT는 자동화에서 사용된다.


WTL(Windows Template Library)

가벼운 프로그램을 만들 때 유용함.

2003에서는 WTL7 버젼

2005에서는 WTL8 버젼


WTL 설치방법

압축파일을 푼다.

AppWiz70 폴더에서 setup71.js파일 실행

도구 -> 옵션-> 프로젝트 -> VC++ 디렉터리에서 wtl을 설치한 디렉터리 추가.


WTL 이용방법

프로젝트 -> 속성 -> C/C++ -> 일반 -> 디렉터리 -> (wtl의 include디렉터리 포함)

리소스 파일에서 wtl의 include디렉터리를 추가한다.