IWMDMProgress3
COM公式ドキュメント
省略可能で、アプリケーションが実装する IWMDMProgress3 インターフェイスは、監視対象のイベントを指定するための追加の入力パラメーターと、コンテキスト固有の情報を渡す手段を提供することで IWMDMProgress2 を拡張します。このコールバックインターフェイスを実装するアプリケーションは、新しいメソッドに加えて、下位互換性のために IWMDMProgress および IWMDMProgress2 に対応するメソッドも実装する必要があります。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
Begin3 メソッドは、操作が開始されようとしていることを示すために Windows Media Device Manager から呼び出されます。
| EventId | GUID | in | 開始される操作を識別する GUID です。指定できる値を次の表に示します。
| ||||||||||
| dwEstimatedTicks | DWORD | in | 操作の完了に必要と見積もられるティック数を指定する DWORD です。dwEstimatedTicks に渡されるティック数は、操作の完了に必要なティック数の推定値です。操作の実行中は Progress3 メソッドが呼び出され、経過したティック数が通知されます。アプリケーションはこの推定値を利用して、進行状況を表示する仕組みを構成できます。 | ||||||||||
| pContext | OPAQUECOMMAND* | inoutoptional | Windows Media Device Manager によって処理されずにデバイスへ送信されたコマンドを格納する OPAQUECOMMAND 構造体へのポインターです。このパラメーターは省略可能で、NULL を指定できます。 |
戻り値
アプリケーションは、次のいずれかの HRESULT 値を返す必要があります。
| 戻り値 | 説明 |
|---|---|
| 操作を続行します。 | |
| Windows Media Device Manager は、現在の操作が完了するのを待たずにキャンセルします。アプリケーションがブロックモードを使用している場合、Windows Media Device Manager はこのエラーをアプリケーションに返します。 |
解説(Remarks)
アプリケーションは、操作を続行することを示す場合は S_OK を返し、操作をキャンセルすることを示す場合は WMDM_E_USER_CANCELLED を返します。アプリケーションがブロックモードを使用していて WMDM_E_USER_CANCELLED を返した場合、Windows Media Device Manager は同じエラーをアプリケーションに返します。
例
次の C++ コードは、Begin3 の実装例を示します。
HRESULT Begin3(GUID EventId, DWORD dwEstimatedTicks, OPAQUECOMMAND* pContext)
{
WCHAR strGuid[64];
StringFromGUID2(reinterpret_cast<GUID&>(EventId),(LPOLESTR)strGuid, 64);
// TODO: Display the message "IWMDMProgress3::Begin3 called."
// followed by the strGuid value.
return S_OK;
}
Progress3 メソッドは、進行中の処理の状況を示すために Windows Media Device Manager から呼び出されます。
| EventId | GUID | in | 進行状況の通知が送信されるイベント ID を指定する GUID です。指定できる値を次の表に示します。
| ||||||||||
| dwTranspiredTicks | DWORD | in | これまでに経過したティック数を指定する DWORD です。 | ||||||||||
| pContext | OPAQUECOMMAND* | inoutoptional | Windows Media Device Manager によって処理されずにデバイスへ直接送信されたコマンドを格納する OPAQUECOMMAND 構造体へのポインターです。このパラメーターは省略可能で、NULL を指定できます。イベントが SCP_EVENTID_DRMINFO の場合、このパラメーターのデータには SCP_PARAMID_DRMVERSION GUID が含まれます。 |
戻り値
アプリケーションは、次のいずれかの HRESULT 値を返す必要があります。
| 戻り値 | 説明 |
|---|---|
| 操作を続行します。 | |
| Windows Media Device Manager は、現在の操作が完了するのを待たずにキャンセルします。アプリケーションがブロックモードを使用している場合、Windows Media Device Manager はこのエラーをアプリケーションに返します。 |
解説(Remarks)
操作を実装するメソッドを所有するインターフェイスは、そのメソッドで定義された操作の実行中に Progress3 メソッドを呼び出します。Progress3 は推定ティック 1 回につき 1 回呼び出されることを想定していますが、実行中の操作が推定ティックごとに 1 回の呼び出しを保証するとは限らないため、呼び出しのたびに dwTranspiredTicks パラメーターを確認する必要があります。
アプリケーションは、操作を続行することを呼び出し元のメソッドに示すために S_OK を返します。操作をキャンセルすることを示すには WMDM_E_USER_CANCELLED を返します。アプリケーションがブロックモードを使用していて WMDM_E_USER_CANCELLED を返した場合、Windows Media Device Manager は同じエラーをアプリケーションに返します。
例
次の C++ コードは、Progress3 の実装例を示します。
HRESULT Progress3(GUID EventId, DWORD dwTranspiredTicks, OPAQUECOMMAND* pContext)
{
WCHAR strGuid[64];
ZeroMemory(strGuid, 64);
StringFromGUID2(reinterpret_cast<GUID&>(EventId),(LPOLESTR)strGuid, 64);
// TODO: Display the message: "Progress3 called. GUID value: "
// followed by the strGUID value.
// TODO: Display the message: "Progress3 dwTranspiredTicks: "
// followed by the dwTranspiredTicks value.
return S_OK;
}
End3 メソッドは、操作が完了したことを示すために Windows Media Device Manager から呼び出されます。
| EventId | GUID | in | 終了するイベントを指定する GUID です。指定できる値を次の表に示します。
| ||||||||||
| hrCompletionCode | HRESULT | in | 進行中だった操作の完了コードを指定する HRESULT です。hrCompletionCode パラメーターは、終了した操作の戻り値です。このパラメーターには、標準の COM エラーコード、HRESULT に変換された Win32 エラーコード、Windows Media Device Manager のエラーコードなど、任意の HRESULT を指定できます。 | ||||||||||
| pContext | OPAQUECOMMAND* | inoutoptional | Windows Media Device Manager によって処理されずにデバイスへ直接送信されたコマンドを格納する OPAQUECOMMAND 構造体へのポインターです。このパラメーターは省略可能で、NULL を指定できます。このコンテキスト構造体は、コンポーネントがイベントとともに関連するデータをアプリケーションへ送るための手段です。この構造体を送信するコンポーネントは、アプリケーションがこのデータ構造をどのように解釈できるかを定義する必要があります。 |
戻り値
このメソッドが呼び出される時点で現在の操作は完了またはキャンセルされているため、Windows Media Device Manager は End3 メソッドが返す戻り値を無視します。
解説(Remarks)
操作を実装するメソッドを所有するインターフェイスは、そのメソッドで定義された操作が完了したときに End3 を呼び出します。
例
次の C++ コードは、End3 の実装例を示します。
HRESULT End3(GUID EventId, HRESULT hrCompletionCode, OPAQUECOMMAND* pContext)
{
// TODO: Display the message "IWMDMProgress3::End3 called."
return S_OK;
}
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IWMDMProgress3 "{21DE01CB-3BB4-4929-B21A-17AF3F80F658}" #usecom global IWMDMProgress3 IID_IWMDMProgress3 "{}" #comfunc global IWMDMProgress3_Begin3 7 int,int,var #comfunc global IWMDMProgress3_Progress3 8 int,int,var #comfunc global IWMDMProgress3_End3 9 int,int,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IWMDMProgress3 "{21DE01CB-3BB4-4929-B21A-17AF3F80F658}" #usecom global IWMDMProgress3 IID_IWMDMProgress3 "{}" #comfunc global IWMDMProgress3_Begin3 7 int,int,sptr #comfunc global IWMDMProgress3_Progress3 8 int,int,sptr #comfunc global IWMDMProgress3_End3 9 int,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。