/* For ClassFactory */ HRESULT WINAPI DMUSIC_CreateDirectMusicImpl(LPCGUID riid, LPVOID* ret_iface, LPUNKNOWN unkouter) { IDirectMusic8Impl *dmusic; HRESULT ret; TRACE("(%s, %p, %p)\n", debugstr_guid(riid), ret_iface, unkouter); *ret_iface = NULL; if (unkouter) return CLASS_E_NOAGGREGATION; dmusic = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusic8Impl)); if (!dmusic) return E_OUTOFMEMORY; dmusic->IDirectMusic8_iface.lpVtbl = &DirectMusic8_Vtbl; dmusic->ref = 1; dmusic->pMasterClock = NULL; dmusic->ppPorts = NULL; dmusic->nrofports = 0; ret = DMUSIC_CreateReferenceClockImpl(&IID_IReferenceClock, (LPVOID*)&dmusic->pMasterClock, NULL); if (FAILED(ret)) { HeapFree(GetProcessHeap(), 0, dmusic); return ret; } create_system_ports_list(dmusic); DMUSIC_LockModule(); ret = IDirectMusic8Impl_QueryInterface(&dmusic->IDirectMusic8_iface, riid, ret_iface); IDirectMusic8_Release(&dmusic->IDirectMusic8_iface); return ret; }
static HRESULT WINAPI IDirectMusicPerformance8Impl_CloseDown (LPDIRECTMUSICPERFORMANCE8 iface) { IDirectMusicPerformance8Impl *This = (IDirectMusicPerformance8Impl *)iface; FIXME("(%p): stub\n", This); if (PostMessageToProcessMsgThread(This, PROCESSMSG_EXIT)) { WaitForSingleObject(This->procThread, INFINITE); This->procThreadTicStarted = FALSE; CloseHandle(This->procThread); } if (NULL != This->pDirectSound) { IDirectSound_Release(This->pDirectSound); This->pDirectSound = NULL; } if (NULL != This->pDirectMusic) { IDirectMusic8_Release(This->pDirectMusic); This->pDirectMusic = NULL; } return S_OK; }