IWMDMProgress
COM公式ドキュメント
アプリケーション側で実装する省略可能なインターフェースである IWMDMProgress を使用すると、メディアのフォーマットやファイル転送などの操作の進行状況をアプリケーションで追跡できます。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
Begin メソッドは、操作が開始されることを示します。可能な場合は、その操作にかかる時間の推定値が渡されます。
| dwEstimatedTicks | DWORD | in | 操作の完了に必要と推定されるティック数を指定する DWORD。 |
戻り値
アプリケーションは、次のいずれかの HRESULT 値を返す必要があります。
| 戻り値 | 説明 |
|---|---|
| 操作を続行します。 | |
| Windows Media Device Manager は、現在の操作が終了するのを待たずにキャンセルします。アプリケーションがブロックモードを使用している場合、Windows Media Device Manager はこのエラーをアプリケーションに返します。 |
解説(Remarks)
このメソッドは、操作が開始されることを示すためにさまざまなメソッドから呼び出されます。dwEstimatedTicks に渡されるティック数は、操作の完了に必要なティック数の推定値です。操作の実行中は、経過したティック数を示すために Progress メソッドが呼び出されます。アプリケーションは、この推定値を利用して進行状況を表示する仕組みを構成できます。
IWMDMProgress3::Begin3 メソッドでは、実行されている処理に関するより詳しい情報が得られます。
例
次の C++ コードは、Begin メソッドの実装例です。
HRESULT Begin(DWORD dwEstimatedTicks)
{
// TODO: Display the message: "IWMDMProgress::Begin called.: "
// followed by the dwEstimatedTicks value.
return S_OK;
}
Progress メソッドは、操作がまだ進行中であることを示します。
| dwTranspiredTicks | DWORD | in | これまでに経過したティック数を指定する DWORD。 |
戻り値
アプリケーションは、次のいずれかの HRESULT 値を返す必要があります。
| 戻り値 | 説明 |
|---|---|
| 操作を続行します。 | |
| Windows Media Device Manager は、現在の操作が終了するのを待たずにキャンセルします。アプリケーションがブロックモードを使用している場合、Windows Media Device Manager はこのエラーをアプリケーションに返します。 |
解説(Remarks)
このメソッドは、他のすべての Windows Media Device Manager のメソッドから呼び出されます。Progress は推定ティックごとに 1 回呼び出されることを想定していますが、実行中の操作が推定ティックごとに 1 回の呼び出しを保証するとは限らないため、呼び出しのたびに dwTranspiredTicks パラメーターを確認する必要があります。
操作を続行することを示すには、アプリケーションは呼び出し元のメソッドに S_OK を返します。操作をキャンセルすることを示すには、WMDM_E_USER_CANCELLED を返します。アプリケーションがブロックモードを使用していて WMDM_E_USER_CANCELLED を返した場合、Windows Media Device Manager は同じエラーをアプリケーションに返します。
例
次の C++ コードは、Progress メソッドの簡単な実装例です。
HRESULT Progress(DWORD dwTranspiredTicks)
{
// TODO: Display the message: "IWMDMProgress::Progress called"
// followed by the dwTranspiredTicks value.
return S_OK;
}
End メソッドは、操作が完了したことを示します。
戻り値
このメソッドの戻り値は、Windows Media Device Manager によって無視されます。
解説(Remarks)
このメソッドは、操作が終了することを示すためにさまざまなインターフェースから呼び出されます。このメソッドが呼び出される時点で操作は既に完了または終了しているため、Windows Media Device Manager は End メソッドが返す戻り値をすべて無視します。
例
次の C++ コードは、End メソッドの実装例です
HRESULT End()
{
// TODO: Display the message: "IWMDMProgress::End called."
return S_OK; // Unnecessary, since this is ignored.
}
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IWMDMProgress "{1DCB3A0C-33ED-11D3-8470-00C04F79DBC0}"
#usecom global IWMDMProgress IID_IWMDMProgress "{}"
#comfunc global IWMDMProgress_Begin 3 int
#comfunc global IWMDMProgress_Progress 4 int
#comfunc global IWMDMProgress_End 5
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。