次の方法で共有


ご利用のシンセサイザーの登録

ソフトウェア シンセサイザーを作成した後、アプリケーションで列挙可能な DirectMusic ポートとして使用できるように、ソフトウェア シンセサイザーをシステム レジストリに追加する必要があります。 インストール プログラムが DLL の DllRegisterServer COM 関数を呼び出して、DLL 自体を COM オブジェクトとして登録するように指示すると、この関数はシンセサイザーも登録できます。 これを行うために、この関数は次のパスにキーを作成して、使用可能なソフトウェア シンセサイザーのリストにエントリを追加します。

  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectMusic\SoftwareSynths

このパスを表すヘッダー ファイル dmusicc.hdefines 定数 REGSTR_PATH_SOFTWARESYNTHS。

キーには、シンセサイザー COM オブジェクトのクラス識別子を使用して名前が付けられます。 キー内には、シンセサイザーの名前を含む「説明」という文字列フィールドがあります。

次のコード例は、DllRegisterServer から呼び出してシンセサイザーを登録できる関数RegisterSynthを示しています:

  const char cszSynthRegRoot[] = REGSTR_PATH_SOFTWARESYNTHS "\\";
  const char cszDescriptionKey[] = "Description";
  const int CLSID_STRING_SIZE = 39;
  HRESULT CLSIDToStr(const CLSID &clsid, char *szStr, int cbStr);
 
  HRESULT RegisterSynth(REFGUID guid,
                        const char szDescription[])
  {
      HKEY hk;
      char szCLSID[CLSID_STRING_SIZE];
      char szRegKey[256];
 
      HRESULT hr = CLSIDToStr(guid, szCLSID, sizeof(szCLSID));
      if (!SUCCEEDED(hr))
      {
          return hr;
      }
 
      strcpy(szRegKey, cszSynthRegRoot);
      strcat(szRegKey, szCLSID);
 
      if (RegCreateKey(HKEY_LOCAL_MACHINE,
                       szRegKey,
                       &hk))
      {
          return E_FAIL;
      }
 
      hr = S_OK;
      if (RegSetValueEx(hk,
                        cszDescriptionKey,
                        0L,
                        REG_SZ,
                        (const unsigned char *)szDescription,
                        strlen(szDescription) + 1))
      {
          hr = E_FAIL;
      }
 
      RegCloseKey(hk);
      return hr;
  }

CLSIDToStr これは、CLSID 値を文字列に変換する、ローカルに定義された関数 (前のコード例には示されていません) です。 これは、Microsoft Windows SDK ドキュメントで説明されている StringFromCLSID 関数に似ています。