IWMProximityDetection
COM公式ドキュメント
IWMProximityDetection インターフェイスは、メディアデータを受信する再生デバイスを検証します。
解説(Remarks)
検証状態はデバイス登録データベースに格納されます。デバイスの検証状態は IWMRegisteredDevice::IsValid を呼び出して確認できます。
検証は 48 時間で期限切れになります。
メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
StartDetection メソッドは、近接検出プロセスを開始します。このメソッドを呼び出した後は、WMT_PROXIMITY_COMPLETED メッセージを受信するまで IWMProximityDetection を解放しないでください。
| pbRegistrationMsg | BYTE* | in | メモリ内の登録メッセージのアドレス。このメッセージは、アプリケーションがデバイスから受信します。 |
| cbRegistrationMsg | DWORD | in | 登録メッセージのサイズ(バイト単位)。 |
| pbLocalAddress | BYTE* | in | 近接検出中に使用するローカルネットワークインターフェイスのアドレスを格納する SOCKADDR_STORAGE 構造体のアドレス。dwExtraPortsAllowed パラメーターが 0 でない場合、SOCKADDR_STORAGE 構造体で指定されたポート番号は、試行されるポート範囲の開始点を示します。 |
| cbLocalAddress | DWORD | in | pbLocalAddress が指す構造体のサイズ。sizeof(SOCKADDR_STORAGE) を設定します。 |
| dwExtraPortsAllowed | DWORD | in | 以前のポートが正常に使用できなかった場合に、メソッドが使用を試みる追加ポートの数を指定します。メソッドは常に、まず pbLocalAddress パラメーターで指定されたポートの使用を試みます。その試行が失敗した場合、メソッドはこのパラメーターの値まで追加の試行を行います。以降の試行ごとにポート番号がインクリメントされます。したがって、pbLocalAddress のポート番号が 5000 で、dwExtraPortsAllowed が 20 に設定されている場合、メソッドはポート 5000 から開始し、必要に応じてポート 5001 から 5020 までを試行します。 |
| ppRegistrationResponseMsg | INSSBuffer** | out | 登録応答メッセージを格納するバッファーオブジェクト上の INSSBuffer インターフェイスのアドレスを受け取る変数のアドレス。このメッセージデータをデバイスに送信する必要があります。 |
| pCallback | IWMStatusCallback* | in | 近接検出のステータスメッセージを受け取る IWMStatusCallback インターフェイスのアドレス。 |
| pvContext | void* | in | アプリケーションが使用する汎用ポインター。これは IWMStatusCallback::OnStatus コールバックの呼び出し時にアプリケーションに渡されます。単一のステータスコールバックを共有する場合、このパラメーターを使用して、異なるオブジェクトからのメッセージを区別できます。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
このメソッドは非同期です。近接検出が完了すると、pCallback で指定されたコールバックに WMT_PROXIMITY_RESULT メッセージが送信されます。完了メッセージには、成功または失敗を示す HRESULT が付随します。
近接検出が完了するかどうかにかかわらず、リスニングスレッドは 2 分間実行された後、WMT_PROXIMITY_COMPLETED メッセージを送信します。このメッセージを受信するまで、IWMProximityDetection インターフェイスを解放しないでください。
このメソッドが失敗コードを返した場合、コールバックにメッセージは送信されません。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IWMProximityDetection "{6A9FD8EE-B651-4BF0-B849-7D4ECE79A2B1}" #usecom global IWMProximityDetection IID_IWMProximityDetection "{}" #comfunc global IWMProximityDetection_StartDetection 3 var,int,var,int,int,sptr,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IWMProximityDetection "{6A9FD8EE-B651-4BF0-B849-7D4ECE79A2B1}" #usecom global IWMProximityDetection IID_IWMProximityDetection "{}" #comfunc global IWMProximityDetection_StartDetection 3 sptr,int,sptr,int,int,sptr,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。