Регистрация синтезатора
После создания программного синтезатора его необходимо добавить в системный реестр, чтобы он был доступен приложениям в виде порта DirectMusic, который можно перечислить. Когда программа установки вызывает com-функцию DLL DllRegisterServer , чтобы сообщить библиотеке DLL зарегистрировать себя в качестве COM-объекта, функция также может зарегистрировать синтезатор. Для этого функция добавляет запись в список доступных синтезаторов программного обеспечения, создав ключ по следующему пути:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectMusic\SoftwareSynths
Файл заголовка dmusicc.hdefines константы REGSTR_PATH_SOFTWARESYNTHS для представления этого пути.
Ключ называется с идентификатором класса COM-объекта синтезатора. В ключе находится строковое поле с именем "Описание" с именем синтезатора.
В следующем примере кода показана функция , 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 в символьную строку. Она похожа на функцию StringFromCLSID, описанную в документации по Microsoft Windows SDK.