외부 원본의 데이터를 사용하는 개체는 해당 원본의 데이터가 변경될 때 정보를 제공해야 하는 경우가 있습니다. 예를 들어 일부 스프레드시트의 데이터를 사용하는 주식 시세 테이프 뷰어는 해당 데이터가 변경될 때 알림을 받아야 디스플레이를 업데이트할 수 있습니다. 마찬가지로 복합 문서에는 포함된 개체의 데이터 변경 내용에 대한 정보가 필요하므로 데이터 캐시를 업데이트할 수 있습니다. 이와 같은 경우 데이터의 동적 업데이트가 바람직한 경우 데이터 원본은 소비자가 데이터를 업데이트하기 위해 모든 항목을 삭제하도록 의무화하지 않고 데이터 소비자에게 변경 내용이 발생할 때 이를 알리는 몇 가지 메커니즘이 필요합니다. 데이터 원본에서 변경이 발생했다는 알림을 받은 이상적으로는 소비 개체가 여가 시간에 업데이트된 복사본을 요청할 수 있습니다.
이 유형의 비동기 알림을 처리하는 COM의 메커니즘은 IAdviseSink라는 인터페이스를 구현하는 모든 COM 개체인 advise 싱크라는 개체입니다. 데이터 소비자는 IAdviseSink를 구현합니다. 관심 있는 데이터 개체에 포인터를 전달하여 알림을 수신하도록 등록합니다.
IAdviseSink 인터페이스는 비동기 알림을 수신하기 위한 다음 메서드를 노출합니다.
| 메서드 | 조언 싱크에 알림 |
|---|---|
|
OnDataChange |
호출 개체의 데이터가 변경되었습니다. |
|
OnViewChange |
호출 개체를 그리기 위한 지침이 변경되었습니다. |
|
OnRename |
호출 개체의 모니커가 변경되었습니다. |
|
Onsave |
호출 개체가 영구 스토리지에 저장되었습니다. |
|
OnClose |
호출 개체가 닫혔습니다. |
표에서 알 수 있듯이 IAdviseSink 인터페이스는 호출 개체의 데이터 변경이 아닌 이벤트의 어드바이저 싱크에 알리는 메서드를 노출합니다. 호출 개체는 자체 그리는 방법이 변경되거나 이름이 변경되거나 저장되거나 닫힐 때 싱크에 알릴 수도 있습니다. 이러한 다른 알림은 알림 메커니즘이 동일하지만 복합 문서의 컨텍스트에서 주로 또는 전적으로 사용됩니다. 복합 문서 알림에 대한 자세한 내용은 "복합 문서"를 참조하세요.
advise 싱크를 활용하려면 데이터 원본이 IDataObject::D Advise, IDataObject::D Unadvise 및 IDataObject::EnumDAdvise를 구현해야 합니다. 데이터 소비자는 DAdvise mothod를 호출하여 개체의 데이터가 변경될 때 알림을 받도록 데이터 개체에 알립니다. 사용하는 개체는 DUnadvise 메서드를 호출하여 이 연결을 해제합니다. 모든 이해 당사자는 EnumDAdvise 메서드를 호출하여 데이터 개체와 자문 연결을 갖는 개체의 수를 알아볼 수 있습니다.
원본에서 데이터가 변경되면 데이터 개체는 알림을 수신하도록 등록된 모든 데이터 소비자에서 IAdviseSink::OnDataChange 를 호출합니다. 권고 연결을 추적하고 알림 디스패치를 관리하기 위해 데이터 원본은 데이터 자문 소유자라는 개체를 사용합니다. IDataAdviseHolder 인터페이스를 구현하여 사용자 고유의 데이터 조언 보유자를 만들 수 있습니다. 또는 도우미 함수 CreateDataAdviseHolder를 호출하여 COM에서 이 작업을 수행하도록 할 수 있습니다.