이벤트
Polling : 어떤 사건이 발생했는 지 주기적으로 검사하는 방법. overhead발생.
Connection Point : Sync와 Source와 통신하기 위한 채널.
Advise할 때 (sync) 인터페이스 point를 서버에게 넘겨주고 이후 이벤트가 발생하면 Controller에게 fire한다.
※ 이벤트를 보내는 걸 fire라고 한다.
소스(source) : 이벤트를 클라이언트에게 알려주는(notification) 인터페이스.
소스 오브젝트 : 소스 인터페이스를 가진 쪽
싱크(sync) 오브젝트 : 싱크 인터페이스를 가진 쪽
1. CoCreateInstance
2. QueryInterface for IConnectionPointContainer
3. IConnectionPointContainer::FindConnectionPoint
4. Advise
5. ...
6. Unadvise
※ 소스 인터페이스는 내부 인터페이스라 클래스에서는 볼 수 없다.
실습
BEGIN_CONNECTION_POINT_MAP(CAddBack)
CONNECTION_POINT_ENTRY(__uuidof(_IAddBackEvents))
END_CONNECTION_POINT_MAP()
FindConnectionPoint가 찾는 부분.
dispatch interface
dispinterface _IAddBackEvents
{
properties:
methods:
};
※ C++에서는 dispatch interface가 수행되지 않기 때문에 dual interface로 C++용 인터페이스를 만들어 주어야 한다.
public IConnectionPointContainerImpl<CAddBack>, // ConnectionPointContainer 구현 클래스
public IDispatchImpl<IAddBack, &IID_IAddBack, &LIBID_AddBackEventLib, 1, 0>,
public IConnectionPointImpl<CAddBack, &DIID__IAddBackEvents>, // ConnectionPoint 구현 클래스
public CProxy_IAddBackEvents<CAddBack>, // Event fire를 대행해주는 클래스
※ ConnectionPoint와 CProxy...이벤트 가 2개씩 있어야 한다.
※ 인터페이스 작성을 마쳤으면 클래스에서 '연결지점 마법사'를 수행하면 ATL이 CProxyIAddBackEvents(이벤트 관련) 코드를 생성해 준다. (이벤트 인터페이스를 수정하면 연결지점 마법사를 다시 수행해야 한다.)
'컴퓨터 공부 > COM&ActiveX' 카테고리의 다른 글
[6월 17일 3교시] 이벤트 3 (0) | 2009.06.17 |
---|---|
[6월 17일 2교시] 이벤트 2 (0) | 2009.06.17 |
[6월 16일 3교시] 자동화(automation) 컨트롤러 (0) | 2009.06.16 |
[6월 16일 2교시] 자동화(automation) 컴포넌트 (0) | 2009.06.16 |
[6월 16일 1교시] 자동화(automation) (0) | 2009.06.16 |