DVD インターフェイス ポインタの取得

フィルタ グラフが作成されると、アプリケーションは DVD ナビゲータ、フィルタ グラフ マネージャ、ビデオ ウィンドウの制御に必要なポインタを取得できる。以下のサンプル コードは、エラー チェックなどのコードを省いて単純化した基本的な手順を示している。完全なコードは、DVD サンプル アプリケーションで CDvdCore::BuildGraph メソッドに含まれている。

// DVD グラフ ビルダ オブジェクトのインスタンスを作成する。
HRESULT hr;
hr = CoCreateInstance(CLSID_DvdGraphBuilder,
                          NULL,
                          CLSCTX_INPROC_SERVER,
                          IID_IDvdGraphBuilder,
                          reinterpret_cast<void**>(&m_pIDvdGB));

// DVD フィルタ グラフを作成する。
AM_DVD_RENDERSTATUS buildStatus;
hr = m_pIDvdGB->RenderDvdVideoVolume(pszwDiscPath, m_dwRenderFlags, &buildStatus);

// DVD ナビゲータ インターフェイスへのポインタを取得する。
hr = m_pIDvdGB->GetDvdInterface(IID_IDvdInfo2, reinterpret_cast<void**>(&m_pIDvdI2));
hr = m_pIDvdGB->GetDvdInterface(IID_IDvdControl2, reinterpret_cast<void**>(&m_pIDvdC2));
   ...    
// フィルタ グラフ マネージャへのポインタを取得する。
hr = m_pDvdGB->GetFiltergraph(&m_pGraph);
...   
// フィルタ グラフを全体として制御するため、
// グラフ ポインタを使って IMediaControl へのポインタを取得する。
hr = m_pGraph->QueryInterface(IID_IMediaControl, reinterpret_cast<void**>(&m_pIMC));
...   
// DVD やその他のフィルタ グラフ イベントの処理に使われる 
// IMediaEventEx へのポインタを取得する。
hr = m_pGraph->QueryInterface(IID_IMediaEventEx, reinterpret_cast<void**>(&m_pME)); 
...                
// ビデオ レンダラ フィルタのウィンドウ スタイルとメッセージ処理の動作を設定するため、
// もう一度グラフ ビルダ ポインタを使って IVideoWindow インターフェイスを取得する。
hr = m_pIDvdGB->GetDvdInterface(IID_IVideoWindow, reinterpret_cast<void**>(&m_pIVW));
  
hr = m_pDvdGB->GetDvdInterface(IID_IAMLine21Decoder, reinterpret_cast<void**>(&pL21Dec));