Registro del sintetizador
Una vez creado el sintetizador de software, debe agregarse al registro del sistema para que esté disponible para las aplicaciones como un puerto de DirectMusic que se pueda enumerar. Cuando el programa de instalación llama a la función COM DllRegisterServer de la DLL para indicar al archivo DLL que se registre como un objeto COM, la función también puede registrar el sintetizador. Para ello, la función agrega una entrada a la lista de sintetizadores de software disponibles mediante la creación de una clave en la ruta de acceso siguiente:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectMusic\SoftwareSynths
Archivo de encabezado dmusicc.hdefines constante REGSTR_PATH_SOFTWARESYNTHS para representar esta ruta de acceso.
La clave se denomina con el identificador de clase del objeto COM del sintetizador. Dentro de la clave hay un campo de cadena denominado "Description" con el nombre del sintetizador.
En el código de ejemplo siguiente se muestra una función, RegisterSynth
, a la que se puede llamar desde DllRegisterServer para registrar el 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
es una función definida localmente (no se muestra en el ejemplo de código anterior) que convierte un valor CLSID en una cadena de caracteres. Es similar a la función StringFromCLSID que se describe en la documentación de Microsoft Windows SDK.