/* 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); IDirectMusic8Impl_Release(&dmusic->IDirectMusic8_iface); return ret; }
/* for ClassFactory */ HRESULT WINAPI DMUSIC_CreateDirectMusicImpl (LPCGUID lpcGUID, LPVOID* ppobj, LPUNKNOWN pUnkOuter) { IDirectMusic8Impl *dmusic; TRACE("(%p,%p,%p)\n",lpcGUID, ppobj, pUnkOuter); dmusic = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusic8Impl)); if (NULL == dmusic) { *ppobj = NULL; return E_OUTOFMEMORY; } dmusic->lpVtbl = &DirectMusic8_Vtbl; dmusic->ref = 0; /* will be inited with QueryInterface */ dmusic->pMasterClock = NULL; dmusic->ppPorts = NULL; dmusic->nrofports = 0; DMUSIC_CreateReferenceClockImpl (&IID_IReferenceClock, (LPVOID*)&dmusic->pMasterClock, NULL); return IDirectMusic8Impl_QueryInterface ((LPDIRECTMUSIC8)dmusic, lpcGUID, ppobj); }