Поделиться через


Метод IMessageFilter::HandleInComingCall (objidl.h)

Предоставляет единую точку входа для входящих вызовов.

Этот метод вызывается перед каждым вызовом метода, исходящим за пределами текущего процесса, и предоставляет возможность фильтровать или отклонять входящие вызовы (или обратные вызовы) к объекту или процессу.

Синтаксис

DWORD HandleInComingCall(
  [in] DWORD           dwCallType,
  [in] HTASK           htaskCaller,
  [in] DWORD           dwTickCount,
  [in] LPINTERFACEINFO lpInterfaceInfo
);

Параметры

[in] dwCallType

Тип полученного входящего вызова. Возможные значения из перечисления CALLTYPE.

[in] htaskCaller

Идентификатор потока вызывающего объекта.

[in] dwTickCount

Число тактов, затраченных с момента исходящего вызова, если параметр dwCallType не CALLTYPE_TOPLEVEL. Если параметр dwCallType имеет значение CALLTYPE_TOPLEVEL, параметр dwTickCount следует игнорировать.

[in] lpInterfaceInfo

Указатель на структуру INTERFACEINFO , которая определяет вызываемый объект, интерфейс и метод. В случае вызовов DDE lpInterfaceInfo может иметь значение NULL , так как уровень DDE не возвращает сведения об интерфейсе.

Возвращаемое значение

Этот метод может возвращать следующие значения.

Код возврата Описание
SERVERCALL_ISHANDLED
Приложение может обработать вызов.
SERVERCALL_REJECTED
Приложение не может обработать вызов из-за непредвиденных проблем, таких как недоступность сети, или если он находится в процессе завершения.
SERVERCALL_RETRYLATER
Приложение не может обработать вызов в настоящее время. Приложение может возвращать это значение, если оно находится в модальном состоянии, управляемом пользователем.

Комментарии

Если он реализован, метод HandleInComingCall вызывается com при получении входящего COM-сообщения.

В зависимости от текущего состояния приложения вызов принимается, обрабатывается или отклоняется (постоянно или временно). Если возвращается SERVERCALL_ISHANDLED, приложение может обработать вызов, хотя успех зависит от интерфейса, для которого предназначен вызов. Если вызов не может быть обработан, COM возвращает RPC_E_CALL_REJECTED.

Синхронизированные с вводом и асинхронные вызовы отправляются, даже если приложение возвращает SERVERCALL_REJECTED или SERVERCALL_RETRYLATER.

HandleInComingCall не следует использовать для удержания обновлений объектов во время таких операций, как полосовая печать. Для этого используйте IViewObject::Freeze.

Вы также можете использовать HandleInComingCall для настройки состояния приложения, чтобы вызов можно было обработать в будущем.

Примечание Хотя параметр htaskCaller типизированный как HTASK, он содержит идентификатор вызывающего потока. При реализации интерфейса IMessageFilter можно вызвать функцию OpenThread , чтобы получить дескриптор потока из параметра htaskCaller , а также функцию GetProcessIdOfThread , чтобы получить идентификатор процесса.
 

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header objidl.h

См. также раздел

Imessagefilter