Platform SDK: DirectX |
オブジェクトをロードするには、次のコード例に示すように、最初に IDirectMusicLoader インターフェイスを取得する。
IDirectMusicLoader* m_pLoader; CoInitialize(NULL); HRESULT hr = CoCreateInstance( CLSID_DMLoader, NULL, CLSCTX_INPROC, IID_IDirectMusicLoader, (void**)&m_pLoader);
次にオブジェクトを記述し、IDirectMusicLoader::GetObject メソッドを呼び出してそのオブジェクトをロードし、希望のインターフェイスを取得する。
次のコード例では、ディスクからスタイルをロードし、そのスタイルへのポインタを、パラメータによって指定された変数へ返している。
void myLoadStyle( IDirectMusicStyle **ppIStyle) { IDirectMusicLoader *pILoader; // ローダー インターフェイス。 /* 通常はローダーを 1 回作成し、アプリケーションを実行している間、 そのローダーを使用する。これにより、オーバーヘッドが減少し、 オブジェクトをキャッシングするローダーの機能を利用できる。ただし、 この例では、ローダーを動的に作成し、スタイルをロードした後で 破棄している。*/ CoCreateInstance( CLSID_DirectMusicLoader,NULL, CLSCTX_INPROC, IID_IDirectMusicLoader, (void **) &pILoader); if (pILoader) { DMUS_OBJECTDESC Desc; // 最初にファイル名とスタイル オブジェクトの GUID を指定して、 // Desc を初期化する。 wcscpy(Desc.wszFileName,L"c:\\mymusic\\funky\\polka.sty"); Desc.guidClass = CLSID_DirectMusicStyle; Desc.dwSize = sizeof (DMUS_OBJECTDESC); Desc.dwValidData = DMUS_OBJ_CLASS | DMUS_OBJ_FILENAME | DMUS_OBJ_FULLPATH; pILoader->GetObject(&Desc, IID_IDirectMusicStyle, (void **) ppIStyle); pILoader->Release(); } }
このコード例では、ファイルをフル パス名で指定し、これを DMUS_OBJ_FULLPATH フラグを設定して指示している。既に検索ディレクトリを設定してある場合は、フル パス情報なしでファイルの短い名前を使える。例については、「ローダーの検索ディレクトリの設定」を参照すること。
検索対象の特定のファイル オブジェクトを識別するには、DMUS_OBJECTDESC 構造体の wszName、guidObject、wszFileName の各メンバのいずれかに値を入力し、dwValidData メンバに適切な 1 つまたは複数のフラグをセットする。wszFileName ではなく wszName か guidObject を使ってファイルを識別する場合は、IDirectMusicLoader::ScanDirectory メソッドを呼び出して、カレント ディレクトリ内の GUID と名前を利用可能にしなければならない。詳細については、「ディレクトリでのオブジェクト検索」を参照すること。
オブジェクトをロードするには、まず DirectMusicLoader オブジェクトを作成する。続いて、次のいずれかのメソッドを呼び出す。
目的のオブジェクトが含まれているファイルの、ファイル名またはフル パスのいずれかを渡す。これらのメソッドは、適切なクラスのインスタンスを返す。
次のコード例では、現在の検索ディレクトリにあるファイルからセグメントをロードしている。objDX は DirectX7 オブジェクトを表す。
Dim objDMLoader As DirectMusicLoader Dim objSeg As DirectMusicSegment Set objDMLoader = objDX.DirectMusicLoaderCreate Set objSeg = objDMLoader.LoadSegment("Myseg.sgt")
「リソースからのオブジェクトのロード」も参照すること。