###IUnknown::QueryInterface メソッド
Microsoftの「CまたはC++によるDirectXプログラミング>COM の使い方>IUnknown」
によると以下の様に書かれています。
オブジェクトが特定のコンポーネント オブジェクト モデル (COM) インターフェイスをサポートしているかどうかを判別する。インターフェイスがサポートされている場合、システムはオブジェクトの参照カウントを増やし、アプリケーションは、そのインターフェイスをすぐに使える。
C++
1HRESULT QueryInterface(REFIID riid,LPVOID *ppvObj);
パラメータ
riid: 要求するインターフェイスの参照識別子
ppvObj: 目的のインターフェイスがサポートされている場合に、インターフェイスへのポインタが格納されるポインタ変数のアドレス。
戻り値
成功した場合は、S_OK を返す。
失敗した場合は、E_NOINTERFACE または E_POINTER を返す。コンポーネントには、これらのエラー値に対する独自の定義をヘッダー ファイルに格納しているものもある。たとえば、Microsoft® DirectInput® では DIERR_NOINTERFACE は E_NOINTERFACE に等しい。
注意
このメソッドの呼び出しにより取得したインターフェイスを使う必要がない場合は、そのインターフェイスの IUnknown::Release メソッドを呼び出してインターフェイスを解放しなければならない。IUnknown::QueryInterface メソッドにより、Microsoft およびサード パーティ各社は、機能を妨害することなくオブジェクトを拡張できる。
###該当のソースコード
#include <stdio.h> #include <dshow.h> #define FILENAME L"mpeg2_mpeg2_ac3.mpg" int main() { IGraphBuilder *pGraphBuilder = NULL; IMediaControl *pMediaControl = NULL; // COMを初期化 CoInitialize(NULL); // FilterGraphManagerを生成 CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder, (LPVOID *)&pGraphBuilder); // MediaControlインターフェース取得 pGraphBuilder->QueryInterface(IID_IMediaControl,(LPVOID *)&pMediaControl); // Graphを生成 pMediaControl->RenderFile(FILENAME); // 再生開始 pMediaControl->Run(); // 再生中にプログラムが終わってしまわないように MessageBox(NULL, "Block Execution", "Block", MB_OK); // 資源を解放 pMediaControl->Release(); pGraphBuilder->Release(); // COM終了 CoUninitialize(); return 0; }
###分からないこと
- リストIUnknown::QueryInterface メソッドの説明で言うところのオブジェクトとは、該当のソースコードの中で言うと生成したFilterGraphManagerのことで良いのでしょうか?
- 「特定のコンポーネント オブジェクト モデル (COM) インターフェイスをサポートしているかどうかを判別する」とありますが、該当のソースコードの中で言うと特定のとはどのようなインターフェイスのことを指しているのでしょうか?
- 「インターフェイスがサポートされている場合、システムはオブジェクトの参照カウントを増やし、アプリケーションは、そのインターフェイスをすぐに使える。」とありますが、該当のソースコードの中で言うとアプリケーションとは何に該当するのでしょうか?
以上の通り、全く見当がついていなくて申し訳ありませんが、ここを読んだ方が良い等のご指摘いただけるとありがたいです。
初心者ですがよろしくお願いします。

回答1件
あなたの回答
tips
プレビュー