ご利用のシンセサイザーの登録
ソフトウェア シンセサイザーを作成した後、アプリケーションで列挙可能な DirectMusic ポートとして使用できるように、ソフトウェア シンセサイザーをシステム レジストリに追加する必要があります。 インストール プログラムが DLL の DllRegisterServer COM 関数を呼び出して、DLL 自体を COM オブジェクトとして登録するように指示すると、この関数はシンセサイザーも登録できます。 これを行うために、この関数は次のパスにキーを作成して、使用可能なソフトウェア シンセサイザーのリストにエントリを追加します。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectMusic\SoftwareSynths
このパスを表すヘッダー ファイル dmusicc.hdefines 定数 REGSTR_PATH_SOFTWARESYNTHS。
キーには、シンセサイザー COM オブジェクトのクラス識別子を使用して名前が付けられます。 キー内には、シンセサイザーの名前を含む「説明」という文字列フィールドがあります。
次のコード例は、DllRegisterServer から呼び出してシンセサイザーを登録できる関数RegisterSynth
を示しています:
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 値を文字列に変換する、ローカルに定義された関数 (前のコード例には示されていません) です。 これは、Microsoft Windows SDK ドキュメントで説明されている StringFromCLSID 関数に似ています。