IMessageFilter::HandleInComingCall 方法 (objidl.h)

为传入呼叫提供单个入口点。

此方法在源自当前进程外部的每个方法调用之前调用,并提供筛选或拒绝传入调用 (或) 对象或进程的回调的能力。

语法

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

参数

[in] dwCallType

已接收的传入呼叫的类型。 可能的值来自枚举 CALLTYPE

[in] htaskCaller

调用方线程 ID。

[in] dwTickCount

如果未CALLTYPE_TOPLEVEL dwCallType ,则为自发出传出调用以来经过的计时周期计数。 如果 dwCallType CALLTYPE_TOPLEVEL,则应忽略 dwTickCount

[in] lpInterfaceInfo

指向 INTERFACEINFO 结构的指针,该结构标识要调用的对象、接口和方法。 对于 DDE 调用, lpInterfaceInfo 可以为 NULL ,因为 DDE 层不返回接口信息。

返回值

此方法可以返回以下值。

返回代码 说明
SERVERCALL_ISHANDLED
应用程序可能能够处理调用。
SERVERCALL_REJECTED
由于不可预见的问题(例如网络不可用)或应用程序正在终止,应用程序无法处理调用。
SERVERCALL_RETRYLATER
应用程序此时无法处理调用。 当应用程序处于用户控制的模式状态时,可能会返回此值。

注解

如果实现,当收到传入 COM 消息时,COM 将调用 HandleInComingCall

根据应用程序的当前状态,将接受并处理调用,或者永久或暂时) (拒绝调用。 如果返回SERVERCALL_ISHANDLED,应用程序也许能够处理调用,尽管成功取决于调用的目标接口。 如果无法处理调用,COM 将返回RPC_E_CALL_REJECTED。

即使应用程序返回SERVERCALL_REJECTED或SERVERCALL_RETRYLATER,也会调度输入同步调用和异步调用。

在操作(如带段打印)期间,不应使用 HandleInComingCall 来阻止对对象的更新。 为此,请使用 IViewObject::Freeze

还可以使用 HandleInComingCall 设置应用程序的状态,以便将来可以处理调用。

注意 尽管 htaskCaller 参数类型化为 HTASK,但它包含调用线程的线程 ID。 实现 IMessageFilter 接口时,可以调用 OpenThread 函数以从 htaskCaller 参数获取线程句柄,并且可以调用 GetProcessIdOfThread 函数以获取进程 ID。
 

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 objidl.h

另请参阅

IMessageFilter