인터페이스는 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디렉터리를 추가한다.
'컴퓨터 공부 > COM&ActiveX' 카테고리의 다른 글
[6월 16일 2교시] 자동화(automation) 컴포넌트 (0) | 2009.06.16 |
---|---|
[6월 16일 1교시] 자동화(automation) (0) | 2009.06.16 |
[6월 15일 2교시] ATL 1 (0) | 2009.06.15 |
[6월 15일 1교시] tlb를 통한 COM 객체 생성 (0) | 2009.06.15 |
[6월 12일 3교시] Visual C++ and COM (0) | 2009.06.12 |