IDataObject::D Advise 메서드(objidl.h)

데이터 개체와 advise 싱크 간의 연결을 만들기 위해 advise 싱크를 지원하는 개체에 의해 호출됩니다. 이렇게 하면 advise 싱크에 개체의 데이터 변경 내용에 대한 알림을 받을 수 있습니다.

구문

HRESULT DAdvise(
  [in]  FORMATETC   *pformatetc,
  [in]  DWORD       advf,
  [in]  IAdviseSink *pAdvSink,
  [out] DWORD       *pdwConnection
);

매개 변수

[in] pformatetc

향후 알림에 사용할 형식, 대상 디바이스, 측면 및 매체를 정의하는 FORMATETC 구조체에 대한 포인터입니다. 예를 들어 하나의 싱크는 데이터 개체에 있는 데이터의 비트맵 표현이 변경되는 경우에만 알고 싶어할 수 있습니다. 다른 싱크는 동일한 개체의 메타파일 형식에만 관심이 있을 수 있습니다. 관심 있는 데이터가 변경되면 각 조언 싱크에 알림이 표시됩니다. 이 데이터는 알림이 발생할 때 advise 싱크로 다시 전달됩니다.

[in] advf

권고 연결을 제어하기 위한 플래그 그룹입니다. 가능한 값은 ADVF 열거형에서 가져옵니다. 그러나 가능한 ADVF 값 중 일부만 이 메서드와 관련이 있습니다. 다음 표에서는 관련 값에 대해 간략하게 설명합니다.

ADVF 값 Description
ADVF_NODATA 알림과 함께 데이터를 보내지 않도록 데이터 개체에 요청합니다. 일반적으로 데이터가 전송됩니다. 이 플래그는 기본 동작을 재정의하는 방법입니다. ADVF_NODATA 사용하는 경우 OnDataChange에 전달되는 STGMEDIUM 구조체의 tymed 멤버는 일반적으로 TYMED_NULL 포함합니다. 그런 다음 호출자는 후속 IDataObject::GetData 호출을 사용하여 데이터를 검색할 수 있습니다.
ADVF_ONLYONCE 첫 번째 변경 알림이 전송된 후 권고 연결이 제거되도록 합니다. IDataObject::D Unadvise에 대한 암시적 호출은 연결을 제거하기 위해 호출자를 대신하여 수행됩니다.
ADVF_PRIMEFIRST 추가 초기 알림을 요청합니다. ADVF_ONLYONCE 및 ADVF_PRIMEFIRST 조합은 사실상 비동기 IDataObject::GetData 호출을 제공합니다.
ADVF_DATAONSTOP ADVF_NODATA 지정하면 이 플래그를 사용하면 데이터 개체가 제거되기 전에 포함된 데이터가 포함된 마지막 알림이 전송됩니다.

ADVF_NODATA 없이 사용하는 경우 다음 방법 중 하나로 DAdvise 를 구현할 수 있습니다.

  • ADVF_DATAONSTOP 무시할 수 있습니다.
  • 개체는 ADVF_NODATA 지정된 것처럼 동작할 수 있습니다.
변경 알림은 종료 사례에서만 전송됩니다. 종료 전의 데이터 변경으로 인해 알림이 전송되지 않습니다.

[in] pAdvSink

변경 알림을 받을 권고 싱크의 IAdviseSink 인터페이스에 대한 포인터입니다.

[out] pdwConnection

이 연결을 식별하는 토큰입니다. 나중에 이 토큰을 사용하여 IDataObject::D Unadvise)에 전달하여 권고 연결을 삭제할 수 있습니다. 이 값이 0이면 연결이 설정되지 않았습니다.

반환 값

이 메서드는 성공에 대한 S_OK 반환합니다. 다른 가능한 값은 다음과 같습니다.

반환 코드 설명
E_NOTIMPL
이 메서드가 데이터 개체에 구현되지 않은 경우
DV_E_LINDEX
lindex의 값이 잘못되었습니다. 현재 -1만 지원됩니다.
DV_E_FORMATETC
pformatetc의 값이 잘못되었습니다.
OLE_E_ADVISENOTSUPPORTED
데이터 개체에서 변경 알림을 지원하지 않는 경우

설명

DAdvise 는 데이터 개체와 호출자 간에 변경 알림 연결을 만듭니다. 호출자는 개체의 데이터가 변경될 때 알림을 보낼 수 있는 권고 싱크를 제공합니다.

데이터 전송에만 사용되는 개체는 일반적으로 권고 알림을 지원하지 않으며 DAdvise에서 OLE_E_ADVISENOTSUPPORTED 반환합니다.

발신자에게 참고 사항

advise 싱크를 지원하는 개체는 DAdvise 를 호출하여 연결을 설정하고 전달된 FORMATETC 구조에 관심 있는 형식, 측면, 중간 및/또는 대상 디바이스를 지정합니다. 데이터 개체가 하나 이상의 요청된 특성 또는 알림 전송을 전혀 지원하지 않는 경우 OLE_E_ADVISENOTSUPPORTED 반환하여 연결을 거부할 수 있습니다.

연결된 개체의 컨테이너는 바인딩된 링크 원본을 사용하여 직접 또는 연결을 관리하는 표준 OLE 링크 개체를 통해 간접적으로 권고 연결을 설정할 수 있습니다. 바인딩된 링크 원본으로 설정된 Connections 자동으로 삭제되지 않습니다. 컨테이너는 바인딩된 링크 원본에서 IDataObject::D Unadvise 를 명시적으로 호출하여 권고 연결을 삭제해야 합니다. IOleLink 인터페이스를 통해 조작된 OLE 링크 개체는 기본 처리기에서 구현됩니다. OLE 링크 개체를 통해 설정된 Connections 링크 개체가 삭제되면 제거됩니다.

OLE 기본 링크 개체는 OLE가 마지막 변경 시간을 유지할 수 있도록 링크 원본과 함께 "와일드카드 조언"을 만듭니다. 이 조언은 특히 아무것도 변경 된 시간을 주의 하는 데 사용. OLE는 변경되었을 수 있는 모든 데이터 형식을 무시하고 마지막 변경 시간만 표시합니다. 와일드카드 조언을 허용하려면 DAdvise를 호출하기 전에 FORMATETC 멤버를 다음과 같이 설정합니다.

cf == 0; 
ptd == NULL; 
dwAspect == -1; 
lindex == -1 
tymed == -1;

조언 플래그에는 ADVF_NODATA 포함되어야 합니다. OLE의 와일드카드는 항상 애플리케이션에서 수락해야 합니다.

구현자에 대한 참고 사항

알림을 지원하는 IDataObject(DUnadviseEnumDAdvise)의 DAdvise 및 기타 알림 메서드 구현을 간소화하기 위해 OLE는 알림 등록 및 보내기를 관리하는 조언 소유자 개체를 제공합니다. 이 개체에 대한 포인터를 얻으려면 DAdvise의 첫 번째 호출에서 도우미 함수 CreateDataAdviseHolder를 호출합니다. 개체의 IDataAdviseHolder 인터페이스에 대한 포인터를 제공합니다. 그런 다음, 요청된 연결을 만들고 이후에 관리하는 데이터 조언 소유자에서 IDataAdviseHolder::Advise 메서드에 대한 호출을 위임합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 objidl.h

추가 정보

CreateDataAdviseHolder

IAdviseSink::OnDataChange

Idataobject