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.