Microsoft DirectX 8.0

CFactoryTemplate クラス

クラス ファクトリを作成するテンプレートを提供する。

宣言 : Combase.h

Microsoft® DirectShow® では、クラス ファクトリ は CFactoryTemplate クラスを使って特殊化されており、factory template を呼び出す。各クラス ファクトリはファクトリ テンプレートへのポインタを保持する。ファクトリ テンプレートはオブジェクトのクラス ID (CLSID) とオブジェクトを作成した関数へのポインタを含む COM オブジェクトの情報を持つ。

自分の DLL で、g_Templates と名づけられたファクトリ テンプレートのグローバル配列を宣言すること。DllGetClassObject 関数が新しいクラス ファクトリを作成するとき、適合する CLSID でテンプレートの配列を探す。1 つ見つけると、適合したテンプレートへのポインタを保持するクラス ファクトリを作成する。クライアントが IClassFactory::CreateInstance を呼び出すとき、そのクラス ファクトリはテンプレートに定義されたインスタンス化関数を呼び出す。

詳細については、「DLL の作成方法」を参照すること。

Public メンバ変数
m_Nameフィルタの名前。
m_ClsIDオブジェクトの CLSID へのポインタ。
m_lpfnNewオブジェクトのインスタンスを作成する関数へのポインタ。
m_lpfnInitDLL エントリ ポイントから呼び出される関数のポインタ。
m_pAMovieSetup_FilterAMOVIESETUP_FILTER 構造体へのポインタ。
Public メソッド
IsClassIDCLSID がこのクラス テンプレートと合うかどうかを確認する。
CreateInstanceそのクラスのオブジェクト作成関数を呼び出す。

CFactoryTemplate.m_Name

CFactoryTemplate クラス

フィルタの名前が入るワイド キャラクタ文字列

構文

const WCHAR *m_Name;

CFactoryTemplate.m_ClsID

CFactoryTemplate クラス

オブジェクトの CLSID へのポインタ。

構文

const CLSID *m_ClsID;

CFactoryTemplate.m_lpfnNew

CFactoryTemplate クラス

オブジェクトのインスタンスを作成する関数へのポインタ。

構文

typedef CUnknown *(CALLBACK *LPFNNewCOMObject)(LPUNKNOWN pUnkOuter, HRESULT *phr);

LPFNNewCOMObject m_lpfnNew;

注意

自分の DLL で、オブジェクトの新しいインスタンスへのポインタを返す静的な関数を宣言すること。ファクトリ テンプレートでは、この静的な関数のアドレスに m_lpfnNew メンバ変数を設定する。

次の例は m_lpfnNew の典型的な関数を示す :

CUnknown * WINAPI CMyComponent::CreateInstance(LPUNKNOWN pUnk, HRESULT *pHr) 
{
    CMyComponent *pNewObject = new CMyComponent(NAME("My Component"), pUnk, pHr );
    if (pNewObject == NULL) 
{
        *phr = E_OUTOFMEMORY;
    }
    return pNewObject;
} 

CFactoryTemplate.m_lpfnInit

CFactoryTemplate クラス

DLL エントリ ポイントから呼び出される関数のポインタ。 NULL も可。

構文

typedef void (CALLBACK *LPFNInitRoutine)(BOOL bLoading, const CLSID *rclsid);

LPFNInitRoutine m_lpfnInit;

注意

この関数を自分の DLL で提供すると、DLL エントリ ポイント関数は次のパラメータでそれを呼び出す :

CFactoryTemplate.m_pAMovieSetup_Filter

CFactoryTemplate クラス

AMOVIESETUP_FILTER 構造体へのポインタ。

構文

const AMOVIESETUP_FILTER *m_pAMovieSetup_Filter;

注意

この構造体を使ってフィルタをレジストリ自己登録にする。そのコンポーネントがフィルタではないなら、このメンバ変数は NULL も可能である。詳細については、「DirectShow オブジェクトの登録方法」を参照すること。

CFactoryTemplate::CreateInstance

CFactoryTemplate クラス

そのクラスのオブジェクト作成関数を呼び出す。

構文

CUnknown *CreateInstance(
    LPUNKNOWN pUnk,
    HRESULT *phr
);

パラメータ

pUnk
集成した IUnknown インターフェイスへのポインタ。
phr
メソッドの成功・失敗を示す HRESULT 値を受け取る変数へのポインタ。

戻り値

クラス オブジェクトのインスタンスを返す。

注意

IClassFactory::CreateInstance メソッドはこのクラス メソッドを呼び出す。このメソッドは m_lpfnNew メンバ変数によってポイントされる関数を呼び出す。

CFactoryTemplate::IsClassID

CFactoryTemplate クラス

CLSID がこのクラス テンプレートと合うかどうかを確認する。

構文

BOOL IsClassID(
    REFCLSID rclsid
);

パラメータ

rclsid
CLSID を返す。

戻り値

rclsid パラメータが m_ClsID と同じ CLSID なら TRUE を返し、それ以外なら FALSE を返す。