共用方式為


註冊合成器

建立軟體合成器之後,必須將它新增至系統登錄,以便應用程式可以使用它作為可列舉的 DirectMusic 埠。 當安裝程式呼叫 DLL 的 DllRegisterServer COM 函式,告知 DLL 將本身註冊為 COM 物件時,函式也可以註冊合成器。 若要這樣做,函式會在下列路徑中建立索引鍵,將專案新增至可用的軟體合成器清單:

  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectMusic\SoftwareSynths

標頭檔 dmusicc.hdefines 常數REGSTR_PATH_SOFTWARESYNTHS表示此路徑。

索引鍵是以合成器 COM 物件的類別識別碼命名。 索引鍵內是名為 「Description」 的字串欄位,其名稱為合成器。

下列範例程式碼顯示 RegisterSynth 可從 DllRegisterServer 呼叫以註冊合成器的函式:

  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函式。