步驟 2: 宣告篩選類別

[與此頁面相關的功能 DirectShow是舊版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayerIMFMediaEngine音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議使用舊版 API 的現有程式碼盡可能重寫為使用新的 API。

這是 撰寫轉換篩選教學課程的步驟 2。

首先,宣告繼承基類的 C++ 類別:

class CRleFilter : public CTransformFilter
{
    /* Declarations will go here. */
};

每個篩選類別都有相關聯的釘選類別。 視篩選的特定需求而定,您可能需要覆寫針腳類別。 在 CTransformFilter的情況下,針腳會將大部分的工作委派給篩選,因此您可能不需要覆寫針腳。

您必須為篩選產生唯一的 CLSID。 您可以使用 Guidgen 或 Uuidgen 公用程式;永遠不會複製現有的 GUID。 有數種方式可以宣告 CLSID。 下列範例使用 DEFINE_GUID 宏:

[RleFilt.h]
// {1915C5C7-02AA-415f-890F-76D94C85AAF1}
DEFINE_GUID(CLSID_RLEFilter, 
0x1915c5c7, 0x2aa, 0x415f, 0x89, 0xf, 0x76, 0xd9, 0x4c, 0x85, 0xaa, 0xf1);

[RleFilt.cpp]
#include <initguid.h>
#include "RleFilt.h"

接下來,撰寫篩選的建構函式方法:

CRleFilter::CRleFilter()
  : CTransformFilter(NAME("My RLE Encoder"), 0, CLSID_RLEFilter)
{ 
   /* Initialize any private variables here. */
}

請注意 ,CTransformFilter 建構函式的其中一個參數是稍早定義的 CLSID。

下一 步:步驟 3。支援媒體類型交涉

撰寫 DirectShow 篩選