Registrieren Ihres Synthesizers
Nachdem Ihr Softwaresynthesizer erstellt wurde, muss er der Systemregistrierung hinzugefügt werden, damit er anwendungen als DirectMusic-Port zur Verfügung steht, der aufgezählt werden kann. Wenn das Installationsprogramm die DLL-Funktion DllRegisterServer COM aufruft, um die DLL anweisen, sich als COM-Objekt zu registrieren, kann die Funktion auch den Synthesizer registrieren. Dazu fügt die Funktion der Liste der verfügbaren Softwaresynthesizer einen Eintrag hinzu, indem im folgenden Pfad ein Schlüssel erstellt wird:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectMusic\SoftwareSynths
Die Headerdatei dmusicc.hdefines konstante REGSTR_PATH_SOFTWARESYNTHS, um diesen Pfad darzustellen.
Der Schlüssel wird mit dem Klassenbezeichner des SYNTHESIZER-COM-Objekts benannt. Innerhalb des Schlüssels befindet sich ein Zeichenfolgenfeld namens "Description" mit dem Namen des Synthesizers.
Der folgende Beispielcode zeigt die Funktion RegisterSynth
, die von DllRegisterServer aufgerufen werden kann, um den Synthesizer zu registrieren:
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
ist eine lokal definierte Funktion (im vorherigen Codebeispiel nicht dargestellt), die einen CLSID-Wert in eine Zeichenfolge konvertiert. Sie ähnelt der StringFromCLSID-Funktion, die in der Microsoft Windows SDK-Dokumentation beschrieben wird.