static void deleteDrvStruct (LPASIODRVSTRUCT lpdrv) { IASIO *iasio; if (lpdrv != 0) { deleteDrvStruct(lpdrv->next); if (lpdrv->asiodrv) { iasio = (IASIO *)lpdrv->asiodrv; iasio->Release(); } delete lpdrv; } }
LONG AsioDriverList::asioCloseDriver (int drvID) { LPASIODRVSTRUCT lpdrv = 0; IASIO *iasio; if ((lpdrv = getDrvStruct(drvID,lpdrvlist)) != 0) { if (lpdrv->asiodrv) { iasio = (IASIO *)lpdrv->asiodrv; iasio->Release(); lpdrv->asiodrv = 0; } } return 0; }
/** * @param clsid ロードしたいCLSID * @param subkey レジストリの位置など */ Interface(const CLSID& clsid, const SubKey& subkey) : subkey(subkey) { HRESULT hr = CoCreateInstance(clsid, 0, CLSCTX_INPROC_SERVER, clsid, (LPVOID*)&iasio); if (FAILED(hr)) RetryCreateInstance(clsid, subkey); try { iasio->init(systemHandle); } catch (...) { throw CantHandlingASIODriver("ドライバのハンドルの初期化に失敗しました"); } // 名前とドライバのバージョンだけ取得 char buffer[360]; iasio->getDriverName(buffer); driverName = buffer; driverVersion = iasio->getDriverVersion(); }
/** * インターフェースを解放 */ void Release() { iasio->Release(); }