IMessageFilter 인터페이스(objidl.h)

동기 호출의 응답을 기다리는 동안 수신 및 발신 COM 메시지를 선택적으로 처리할 수 있는 기능을 COM 서버 및 애플리케이션에 제공합니다. 메시지를 필터링하면 호출이 성능을 향상시키고 교착 상태를 방지하는 방식으로 처리되도록 하는 데 도움이 됩니다. COM 메시지는 동기, 비동기 또는 입력 동기화일 수 있습니다. 대부분의 인터페이스 호출은 동기적입니다.

상속

IMessageFilter 인터페이스는 IUnknown 인터페이스에서 상속됩니다. IMessageFilter 에는 다음과 같은 유형의 멤버도 있습니다.

메서드

IMessageFilter 인터페이스에는 이러한 메서드가 있습니다.

 
IMessageFilter::HandleInComingCall

들어오는 호출에 대한 단일 진입점을 제공합니다.
IMessageFilter::MessagePending

COM이 원격 호출에 응답하기 위해 대기하는 동안 메시지가 도착했음을 나타냅니다.
IMessageFilter::RetryRejectedCall

다시 시도, 취소 또는 작업 전환 옵션을 제공하는 대화 상자를 표시할 수 있는 기회를 애플리케이션에 제공합니다.

설명

동기 호출을 수행하려면 호출자가 계속하기 전에 회신을 기다려야 합니다. COM은 회신을 기다리는 동안 모달 루프를 입력합니다. 이 시간 동안 호출자는 여전히 들어오는 메시지를 받고 디스패치할 수 있습니다.

비동기 호출을 사용하면 호출자가 호출된 개체의 응답을 기다리지 않고 계속 진행할 수 있습니다. 현재 COM에서는 개체의 IAdviseSink 인터페이스에 대한 유일한 비동기 호출이 있습니다. 개체가 비동기 호출을 처리하는 동안에는 호출 개체에 대한 동기 호출을 수행할 수 없습니다.

포커스 관리 및 type-ahead와 같은 동작이 올바르게 작동하도록 하려면 입력 동기화 호출에서 호출된 개체가 컨트롤을 포기하기 전에 호출을 완료해야 합니다.

WM_QUERYENDSESSION 및 WM_ENDSESSION 사용하여 애플리케이션 종료

사용자가 Windows를 종료하면 열려 있는 각 애플리케이션은 종료가 취소되지 않은 경우 WM_QUERYENDSESSION 메시지와 WM_ENDSESSION 메시지를 받습니다. 이러한 메시지는 SendMessage 함수를 사용하여 호출됩니다. 이 함수는 나가는 모든 LRPC 호출의 시작을 제한합니다. 이러한 개체를 닫기 위해 LRPC가 필요하기 때문에 종료 요청을 받을 때 포함된 열린 개체가 있는 컨테이너 애플리케이션의 문제입니다.

열려 있는 문서가 있는 컨테이너 및 컨테이너/서버 애플리케이션은 일반적으로 사용자가 종료하기 전에 변경 내용을 저장할 것인지 묻는 WM_QUERYENDSESSION 메시지를 수신할 때 메시지 상자를 표시합니다. 긍정 응답은 일반적으로 기본값입니다. 위에서 설명한 상황을 처리하기 위한 권장 사항은 사용자가 변경 내용을 취소할지 묻는 대체 메시지 상자를 애플리케이션에 표시하는 것입니다. 음수 응답이 기본값이어야 합니다. 사용자가 변경 내용을 취소하도록 선택하는 경우 종료할 수 있음을 Windows에 알리는 WM_QUERYENDSESSION대해 TRUE가 반환되어야 합니다. 사용자가 변경 내용을 삭제하지 않으려면 FALSE 를 반환해야 합니다. 실행 중인 포함을 닫거나 해제하려고 시도해서는 안 됩니다.

서버 애플리케이션은 사용자에게 메시지를 표시하지 않고 WM_QUERYENDSESSIONTRUE를 반환해야 합니다. WM_ENDSESSION 메시지를 받으면 모든 COM 애플리케이션은 각 애플리케이션의 문서 및 개체에 대한 일반 닫기 시퀀스를 실행해야 합니다. 동시에 IUnknown::Release에 대한 크로스 프로세스 호출 또는 호출로 인해 발생하는 오류를 무시해야 합니다. 구조화된 스토리지의 복합 파일 구현에서 유지 관리하는 임시 파일을 제대로 플러시하려면 모든 스토리지 포인터(IStorageIStream 인터페이스 포인터)를 해제해야 합니다.

요구 사항

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