Platform SDK: DirectX

ファイルからのオブジェクトのロード

[C++]

オブジェクトをロードするには、次のコード例に示すように、最初に 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 構造体の wszNameguidObjectwszFileName の各メンバのいずれかに値を入力し、dwValidData メンバに適切な 1 つまたは複数のフラグをセットする。wszFileName ではなく wszName guidObject を使ってファイルを識別する場合は、IDirectMusicLoader::ScanDirectory メソッドを呼び出して、カレント ディレクトリ内の GUID と名前を利用可能にしなければならない。詳細については、「ディレクトリでのオブジェクト検索」を参照すること。

[Visual Basic]

オブジェクトをロードするには、まず DirectMusicLoader オブジェクトを作成する。続いて、次のいずれかのメソッドを呼び出す。

目的のオブジェクトが含まれているファイルの、ファイル名またはフル パスのいずれかを渡す。これらのメソッドは、適切なクラスのインスタンスを返す。

次のコード例では、現在の検索ディレクトリにあるファイルからセグメントをロードしている。objDXDirectX7 オブジェクトを表す。

Dim objDMLoader As DirectMusicLoader
Dim objSeg As DirectMusicSegment
 
Set objDMLoader = objDX.DirectMusicLoaderCreate
Set objSeg = objDMLoader.LoadSegment("Myseg.sgt")

リソースからのオブジェクトのロード」も参照すること。