Microsoft DirectX 8.0 |
IMemAllocator インターフェイスをサポートするアロケータを実装する。
宣言 : Amfilter.h
このクラスは CBaseAllocator から派生する。アロケータの詳細については、CBaseAllocator のドキュメントを参照すること。
Protected メンバ変数 | |
---|---|
m_pBuffer | バッファが入るメモリ ブロックへのポインタ。 |
Protected メソッド | |
Free | デコミット操作の間に呼び出される。 |
ReallyFree | バッファのメモリを解放する。 |
Alloc | バッファにメモリを割り当てる。 |
Public メソッド | |
CMemAllocator | コンストラクタ メソッド。 |
~CMemAllocator | デストラクタ メソッド。 |
CreateInstance | CMemAllocator クラスの新しいインスタンスを作成する。 |
IMemAllocator メソッド | |
SetProperties | 割り当てるべきバッファの数と各バッファのサイズを指定する。 |
バッファが入るメモリ ブロックへのポインタ。
構文
LPBYTE m_pBuffer;
注意
サンプル バッファはこのポインタからのオフセットとして計算される。
バッファにメモリを割り当てる。
構文
HRESULT Alloc(void);
戻り値
以下の表に示される HRESULT 値の 1 つを返す。
S_OK 成功。 E_OUTOFMEMORY メモリ不足。 VFW_E_SIZENOTSET バッファ要求がセットされなかった。
注意
このメソッドは CBaseAllocator::Commit メソッドから呼び出される。それは SetProperties メソッドで与えられたバッファ要求に十分な連続的なメモリ ブロックを割り当てる。
コンストラクタ メソッド。
構文
CMemAllocator( TCHAR *pName, LPUNKNOWN pUnk, HRESULT *phr, );
パラメータ
デストラクタ メソッド。
構文
~CMemAllocator(void);
構文
このメソッドは基底クラス デストラクタをオーバーライドし、Decommit と ReallyFree を呼び出す。
CMemAllocator クラスの新しいインスタンスを作成する。
構文
static CUnknown *CreateInstance( LPUNKNOWN pUnk, HRESULT *phr );
パラメータ
戻り値
CUnknown オブジェクトとしてタイプされる 新しい CMemAllocator オブジェクトへのポインタを返す。
デコミット操作の間に呼び出す。
構文
void Free(void);
注意
このメソッドはデコミット操作の間に呼び出される純粋仮想メソッド CBaseAllocator::Free をオーバーライドする。CMemAllocator クラスでは、このメソッドは何もしない。メモリはデストラクタ メソッドで ReallyFree メソッドを呼び出すことでフリーになる。
バッファのメモリを解放する
構文
void ReallyFree (void);
注意
CMemAllocator クラスはこのオブジェクトが削除されるまでメモリを保持する。
割り当てるべきバッファの数と各バッファのサイズを指定する。
構文
HRESULT SetProperties( ALLOCATOR_PROPERTIES *pRequest, ALLOCATOR_PROPERTIES *pActual );
パラメータ
- pRequest
- バッファ要求を入れる ALLOCATOR_PROPERTIES 構造体へのポインタ。
- pActual
- 実際のバッファ プロパティを受け取る ALLOCATOR_PROPERTIES 構造体へのポインタ。
戻り値
以下の表に示される HRESULT 値の 1 つを返す。
S_OK 成功。 E_POINTER NULL ポインタ引数。 VFW_E_ALREADY_COMMITTED フィルタがアクティブな間は割り当てられたメモリを変更することはできない。 VFW_E_BADALIGN 不適切な引数が指定された。 VFW_E_BUFFERS_OUTSTANDING 1 つあるいはそれ以上のバッファがまだアクティブ。
注意
このメソッドは CBaseAllocator::SetProperties メソッドをオーバーライドする。
ALLOCATOR_PROPERTIES 構造体の cbAlign メンバによって指定されるバッファのアラインメントは 2 の累乗でなければならない。