Microsoft DirectX 8.0 (C++) |
IDirectMusicLoader8::EnumObject メソッドを使って、IDirectMusicLoader8::ScanDirectory または IDirectMusicLoader8::GetObject のどちらかを呼び出して内部データベースに記録した、特定のクラスまたは全クラスの全オブジェクトを補間する。見つかった各オブジェクトの説明は、DMUS_OBJECTDESC 構造体に返される。
注 全オブジェクトを確実に見つけるには、最初に ScanDirectory を呼び出しておく。EnumObject はディスク ファイルを解析するのではなく、内部データベースでオブジェクトをチェックする。
次の例では、現在の検索ディレクトリに記録されているすべてのスタイル オブジェクトを列挙し、デバッギング マクロ TRACE を使ってそれらの情報を 1 つずつ表示している。そのクラスで列挙すべきオブジェクトがなくなるまでループは続行される。
void myListStyles( IDirectMusicLoader *pILoader) { HRESULT hr = pILoader->SetSearchDirectory( CLSID_DirectMusicStyle, L"c:\\mymusic\\wassup", TRUE); if (SUCCEEDED(hr)) { hr = pILoader->ScanDirectory( CLSID_DirectMusicStyle, L"sty", L"stylecache"); if (hr == S_OK) // ファイルが見つかった場合のみ。 { DWORD dwIndex; DMUS_OBJECTDESC Desc; Desc.dwSize = sizeof(DMUS_OBJECTDESC); for (dwIndex = 0; ;dwIndex++) { if (S_OK ==(pILoader->EnumObject( CLSID_DirectMusicStyle, dwIndex, &Desc))) { TRACE("Name: %S, Category: %S, Path: %S\n", Desc.wszName, Desc.wszCategory, Desc.wszFileName); } else break; } } } }
この例では、メソッド呼び出しの結果をテストする目的で、SUCCEEDED マクロを使っていない点に注意すること。不適切なインデックス番号を指定した場合、EnumObject が成功コードの S_FALSE を返すためである。