IFunctionDiscoveryNotification::OnUpdate 方法 (functiondiscoveryapi.h)

[函数发现可用于“要求”部分中指定的操作系统。 在后续版本中,它可能已更改或不可用。]

指示已添加、删除或更改函数实例。 此方法由客户端程序实现,并由函数发现调用。

语法

HRESULT OnUpdate(
  [in] QueryUpdateAction enumQueryUpdateAction,
  [in] FDQUERYCONTEXT    fdqcQueryContext,
  [in] IFunctionInstance *pIFunctionInstance
);

参数

[in] enumQueryUpdateAction

一个 QueryUpdateAction 值,该值指定函数发现对指定函数实例执行的操作类型。

[in] fdqcQueryContext

为更改通知注册的上下文。 类型 FDQUERYCONTEXT 定义为 DWORDLONG。 此参数可以为 NULL。

[in] pIFunctionInstance

一个 IFunctionInstance 接口指针,表示受更新影响的函数实例。

返回值

客户端程序的 OnUpdate 方法实现应将以下 HRESULT 值之一返回给调用方。

返回代码 说明
S_OK
该方法已成功完成。
E_INVALIDARG
其中一个输入参数的值无效。

备注

不要从此方法对查询对象调用 Release 。 这样做可能会导致死锁。 如果在回调正在进行时从另一个线程对查询对象调用 Release ,则在回调完成之前不会释放该对象。

提供程序传递到函数发现的所有通知都会排队,并逐个返回到客户端。 回调是同步的,因此客户端一次只接收一个通知。

由于其他 IFunctionDiscoveryNotification 方法调用可能在其他线程中进行,因此必须在退出方法之前还原调用期间对线程状态所做的任何更改。

示例

以下代码演示 OnUpdate 处理程序实现。 CMyNotificationListener 类在 IFunctionDiscoveryNotification 主题中定义。

#include <windows.h>

HRESULT STDMETHODCALLTYPE CMyNotificationListener::OnUpdate(
                                          IN QueryUpdateAction Action,
                                          IN FDQUERYCONTEXT fdqcQueryContext,
                                          IN IFunctionInstance *pInstance)
{
    HRESULT hr = S_OK;

    switch (Action) {
    case QUA_ADD:
        SetEvent( m_hAddEvent );
        break;
    case QUA_REMOVE:
        SetEvent( m_hRemoveEvent );
        break;
    case QUA_CHANGE:
        SetEvent( m_hChangeEvent );
        break;
    }
    return S_OK;
}

要求

   
最低受支持的客户端 Windows Vista [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 [仅限桌面应用]
目标平台 Windows
标头 functiondiscoveryapi.h

请参阅

IFunctionDiscoveryNotification