Partilhar via


Registrando seu sintetizador

Depois que o sintetizador de software for criado, ele deverá ser adicionado ao registro do sistema para que ele esteja disponível para aplicativos como uma porta DirectMusic que pode ser enumerada. Quando o programa de instalação chama a função COM DllRegisterServer da DLL para instruir a DLL a se registrar como um objeto COM, a função também pode registrar o sintetizador. Para fazer isso, a função adiciona uma entrada à lista de sintetizadores de software disponíveis criando uma chave no seguinte caminho:

  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectMusic\SoftwareSynths

O arquivo de cabeçalho dmusicc.hdefines constante REGSTR_PATH_SOFTWARESYNTHS para representar esse caminho.

A chave é nomeada com o identificador de classe do objeto COM do sintetizador. Dentro da chave há um campo de cadeia de caracteres chamado "Descrição" com o nome do sintetizador.

O código de exemplo a seguir mostra uma função, RegisterSynth, que pode ser chamada de DllRegisterServer para registrar o sintetizador:

  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 é uma função definida localmente (não mostrada no exemplo de código anterior) que converte um valor CLSID em uma cadeia de caracteres. É semelhante à função StringFromCLSID descrita na documentação do SDK do Microsoft Windows.