Win32 API 日本語リファレンス
ホームMedia.DirectShow › IAMCopyCaptureFileProgress

IAMCopyCaptureFileProgress

COM
IID670d1d20-a068-11d0-b3f0-00aa003761c5継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IAMCopyCaptureFileProgress インターフェースは、ICaptureGraphBuilder2::CopyCaptureFile メソッドで使用されるコールバックインターフェースです。CopyCaptureFile メソッドは完了までに長い時間がかかる場合があるため、アプリケーションはこのインターフェースを実装することで、コピー操作の進行状況に関する定期的な通知を受け取ることができます。アプリケーションがこの情報を受け取る必要がない場合は、このインターフェースを実装する必要はありません。

解説(Remarks)

このインターフェースを使用するには、インターフェースを継承し、IUnknown のメソッドを含むすべてのメソッドを実装するクラスを作成します。アプリケーション内でそのクラスのインスタンスを生成し、CopyCaptureFile メソッドに渡します。CopyCaptureFile メソッドが戻る前にオブジェクトが削除されないことが保証されている限り、クラス内で COM の参照カウントを実装する必要はありません。

次の例は、このインターフェースを実装するクラスを示しています。

C++
class CProgress : public IAMCopyCaptureFileProgress 
{
public:
    STDMETHODIMP_(ULONG) AddRef() { return 1; }
    STDMETHODIMP_(ULONG) Release() { return 0; }
    STDMETHODIMP QueryInterface(REFIID iid, void **ppv) 
    {
        if  (ppv == NULL) 
        {
            return E_POINTER;
        }
        else if (iid == __uuidof(IUnknown))
        {
            *ppv = static_cast<IUnknown*>(this);
        }
        else if (iid == IID_IAMCopyCaptureFileProgress) 
        {
            *ppv = static_cast<IAMCopyCaptureFileProgress*>(this);
        }
        else
        {
            return E_NOINTERFACE;
        }
        return S_OK;
    }
    STDMETHODIMP Progress(int iPercent) 
    {
        if (iPercent < 0 || iPercent > 100) 
        {
            return E_INVALIDARG;
        }

        TCHAR szMsg[32];
        StringCchPrintf(szMsg, 32, TEXT("Progress: %d%%"), iPercent);
        // Assume g_hwndStatus is a valid HWND.
        SetWindowText(g_hwndStatus, szMsg);  

        return S_OK;
    };
};
次の例では、このクラスを CopyCaptureFile メソッドで使用しています。
C++
// Scope for CProgress object
{
    CProgress Prog;
    // Assume pBuilder is an initialized ICaptureGraphBuilder2 pointer.
    hr = pBuilder->CopyCaptureFile(szCaptureFile, szDestFile, TRUE,
        static_cast(&Prog));
}

メソッド 1

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT Progress(INT iProgress)

Progress メソッドは、ICaptureGraphBuilder2::CopyCaptureFile メソッドがファイルをコピーしている間、定期的に呼び出されます。

iProgressINTinコピー操作の完了率を、0 から 100 までの値で指定します。

戻り値

S_OK または HRESULT エラーコードを返します。

解説(Remarks)

アプリケーションでは通常、iProgress の値を使用して、ユーザーインターフェイス上の進行状況バーを更新します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

#define global IID_IAMCopyCaptureFileProgress "{670D1D20-A068-11D0-B3F0-00AA003761C5}"
#usecom global IAMCopyCaptureFileProgress IID_IAMCopyCaptureFileProgress "{}"
#comfunc global IAMCopyCaptureFileProgress_Progress  3 int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。