컴퓨터 공부/COM&ActiveX

[6월 9일 1교시] IUnknown Interface(141쪽 그림 추가)

려리군 2009. 6. 9. 09:27

IUnknown 포인터 얻기(Default Interface)

IUnknown CreateInstance();

클라이언트는 new 연산자 대신에 CreateInstance()를 사용.

QueryInterface로 (다른) 인터페이스를 얻는다.


HRESULT IUnknown::QueryInterface([in]   REFIID riid, [out] void *ppvObject);

참고주소 : http://msdn.microsoft.com/en-us/library/ms682521(VS.85).aspx

리턴 : 성공시 S_OK, 실패시 E_NOINTERFACE

riid : 파라미터를 인식하는 상수

ppvObject 인터페이스 포인터


※ MFC, ATL은 IUnknown 구현을 제공.


QueryInterface규칙

항상 같은 (Default) IUnknown을 얻는다.

전에 인터페이스를 얻었다면 그 인터페이스를 얻을 수 있다.

가지고 있는 인터페이스를 얻을 수 있다.

어디에선가 인터페이스를 얻었다면 어디든지 그 인터페이스를 얻을 수 있다.


Addref()

인터페이스를 리턴하는 함수는 포인터를 리턴하기 전에 이 함수를 호출한다.

※ 한 번 QueryInterface 호출시 (내부적으로 AddRef()를 호출하므로) 꼭 한 번 Release를 호출해야 한다.


Release

인터페이스가 종료되면, 인터페이스를 해제해야 한다.