Microsoft DirectX 8.0 |
クラス ファクトリを作成するテンプレートを提供する。
宣言 : 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_lpfnInit | DLL エントリ ポイントから呼び出される関数のポインタ。 |
m_pAMovieSetup_Filter | AMOVIESETUP_FILTER 構造体へのポインタ。 |
Public メソッド | |
IsClassID | CLSID がこのクラス テンプレートと合うかどうかを確認する。 |
CreateInstance | そのクラスのオブジェクト作成関数を呼び出す。 |
フィルタの名前が入るワイド キャラクタ文字列
構文
const WCHAR *m_Name;
オブジェクトの CLSID へのポインタ。
構文
const CLSID *m_ClsID;
オブジェクトのインスタンスを作成する関数へのポインタ。
構文
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; }
DLL エントリ ポイントから呼び出される関数のポインタ。 NULL も可。
構文
typedef void (CALLBACK *LPFNInitRoutine)(BOOL bLoading, const CLSID *rclsid); LPFNInitRoutine m_lpfnInit;
注意
この関数を自分の DLL で提供すると、DLL エントリ ポイント関数は次のパラメータでそれを呼び出す :
- bLoading: DLL がロードされているとき TRUE、DLL がロードされていないとき FALSE。
- rclsid: m_ClsID メンバ関数で指定されるオブジェクトの CLISD へのポインタ。
AMOVIESETUP_FILTER 構造体へのポインタ。
構文
const AMOVIESETUP_FILTER *m_pAMovieSetup_Filter;
注意
この構造体を使ってフィルタをレジストリ自己登録にする。そのコンポーネントがフィルタではないなら、このメンバ変数は NULL も可能である。詳細については、「DirectShow オブジェクトの登録方法」を参照すること。
そのクラスのオブジェクト作成関数を呼び出す。
構文
CUnknown *CreateInstance( LPUNKNOWN pUnk, HRESULT *phr );
パラメータ
戻り値
クラス オブジェクトのインスタンスを返す。
注意
IClassFactory::CreateInstance メソッドはこのクラス メソッドを呼び出す。このメソッドは m_lpfnNew メンバ変数によってポイントされる関数を呼び出す。
CLSID がこのクラス テンプレートと合うかどうかを確認する。
構文
BOOL IsClassID( REFCLSID rclsid );
パラメータ
- rclsid
- CLSID を返す。
戻り値
rclsid パラメータが m_ClsID と同じ CLSID なら TRUE を返し、それ以外なら FALSE を返す。