Inscription de votre synthétiseur
Une fois votre synthétiseur logiciel créé, il doit être ajouté au registre système afin qu’il soit disponible pour les applications en tant que port DirectMusic pouvant être énuméré. Lorsque le programme d’installation appelle la fonction COM DllRegisterServer de votre DLL pour indiquer à la DLL de s’inscrire en tant qu’objet COM, la fonction peut également inscrire le synthétiseur. Pour ce faire, la fonction ajoute une entrée à la liste des synthétiseurs logiciels disponibles en créant une clé dans le chemin d’accès suivant :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectMusic\SoftwareSynths
La constante dmusicc.hdefines du fichier d’en-tête REGSTR_PATH_SOFTWARESYNTHS pour représenter ce chemin.
La clé est nommée avec l’identificateur de classe de l’objet COM du synthétiseur. Dans la clé se trouve un champ de chaîne appelé « Description » avec le nom du synthétiseur.
L’exemple de code suivant montre une fonction, RegisterSynth
, qui peut être appelée à partir de DllRegisterServer pour inscrire le synthétiseur :
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
est une fonction définie localement (non illustrée dans l’exemple de code précédent) qui convertit une valeur CLSID en chaîne de caractères. Elle est similaire à la fonction StringFromCLSID décrite dans la documentation Microsoft Windows SDK.