Freigeben über


Registrieren Ihres Synthesizers

Nachdem Ihr Softwaresynthesizer erstellt wurde, muss er der Systemregistrierung hinzugefügt werden, damit er anwendungen als DirectMusic-Port zur Verfügung steht, der aufgezählt werden kann. Wenn das Installationsprogramm die DLL-Funktion DllRegisterServer COM aufruft, um die DLL anweisen, sich als COM-Objekt zu registrieren, kann die Funktion auch den Synthesizer registrieren. Dazu fügt die Funktion der Liste der verfügbaren Softwaresynthesizer einen Eintrag hinzu, indem im folgenden Pfad ein Schlüssel erstellt wird:

  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectMusic\SoftwareSynths

Die Headerdatei dmusicc.hdefines konstante REGSTR_PATH_SOFTWARESYNTHS, um diesen Pfad darzustellen.

Der Schlüssel wird mit dem Klassenbezeichner des SYNTHESIZER-COM-Objekts benannt. Innerhalb des Schlüssels befindet sich ein Zeichenfolgenfeld namens "Description" mit dem Namen des Synthesizers.

Der folgende Beispielcode zeigt die Funktion RegisterSynth, die von DllRegisterServer aufgerufen werden kann, um den Synthesizer zu registrieren:

  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 ist eine lokal definierte Funktion (im vorherigen Codebeispiel nicht dargestellt), die einen CLSID-Wert in eine Zeichenfolge konvertiert. Sie ähnelt der StringFromCLSID-Funktion, die in der Microsoft Windows SDK-Dokumentation beschrieben wird.