Platform SDK: DirectX

オブジェクトの設定

[Visual Basic]

ここでは、C++ で記述されたアプリケーションに関連のある内容だけを説明する。

[C++]

後でほかのオブジェクトから参照されるオブジェクトを、参照元のオブジェクトをロードするときにローダーが取り出せるように、実際にはロードせずに、その場所だけをローダーに指示することが望ましい。オブジェクトに新しい属性を与えて、ローダーが属性を使ってオブジェクトを検索できるようにすることもできる。

SetObject メソッドは、パラメータとして DMUS_OBJECTDESC 構造体を受け取る。この構造体には、2 つの主要な情報が含まれる。

HRESULT SetObjectFromResource(const GUID* guid, int ID,
        char* type, WCHAR* name)
{
  HRSRC hResource = NULL;
  HGLOBAL hData = NULL;
  hResource = FindResource(g_hInstance, MAKEINTRESOURCE(ID), type);
  if (hResource != NULL)
  {
    hData = LoadResource(g_hInstance, hResource); 
    if (hData != NULL)
    {
      DMUS_OBJECTDESC desc;
      if(m_pLoader && (hResource != NULL) && (hData != NULL))
      {
        ZeroMemory(&desc,sizeof(desc));
        desc.pbMemData = (BYTE*) LockResource(*hData);
        desc.llMemLength = SizeofResource(g_hInstance, (*hResource));
        desc.guidClass = (*guid);
        desc.dwSize = sizeof(desc);
        desc.dwValidData = DMUS_OBJ_CLASS | DMUS_OBJ_MEMORY;
        if (name)
        {
            wcscpy(desc.wszName, name);
            desc.dwValidData |= DMUS_OBJ_NAME;
        }
        return m_pLoader->SetObject(&desc);
      }
    }
  }
  return E_FAIL;
}

次のコードは、MIDI タイプのリソースとして格納された MIDI ファイルに名前を割り当てるときに使用できる。

SetObjectFromResource(CLSID_DirectMusicSegment, 101,
"MIDI", "canyon");

これ以降、オブジェクトはいつでも名前を使ってロードできる。