[関数の検出は、[要件] セクションで指定されたオペレーティング システムで使用できます。 これは、以降のバージョンで変更または使用できない可能性があります。
関数インスタンスが追加、削除、または変更されたことを示します。 このメソッドはクライアント プログラムによって実装され、関数探索によって呼び出されます。
構文
HRESULT OnUpdate(
[in] QueryUpdateAction enumQueryUpdateAction,
[in] FDQUERYCONTEXT fdqcQueryContext,
[in] IFunctionInstance *pIFunctionInstance
);
パラメーター
[in] enumQueryUpdateAction
指定した関数インスタンスに対して Function Discovery が実行するアクションの種類を指定する QueryUpdateAction 値。
[in] fdqcQueryContext
変更通知用に登録されたコンテキスト。 FDQUERYCONTEXT 型は DWORDLONG として定義されます。 このパラメーターは、NULL でもかまいません。
[in] pIFunctionInstance
更新の影響を受ける関数インスタンスを表す IFunctionInstance インターフェイス ポインター。
戻り値
クライアント プログラムの OnUpdate メソッドの実装では、次のいずれかの HRESULT 値を呼び出し元に返す必要があります。
| リターン コード | 説明 |
|---|---|
|
メソッドは正常に完了しました。 |
|
入力パラメーターの 1 つの値が無効です。 |
注釈
このメソッドからクエリ オブジェクトに対して Release を呼び出さないでください。 これを行うと、デッドロックが発生する可能性があります。 コールバックの処理中に別のスレッドからクエリ オブジェクトに対して Release が呼び出された場合、コールバックが完了するまでオブジェクトは解放されません。
プロバイダーによって Function Discovery に渡されるすべての通知はキューに入れられ、クライアントに 1 つずつ返されます。 コールバックは同期されるため、クライアントは一度に 1 つの通知のみを受信します。
他 の 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 |