static HRESULT WINAPI IDirectXFileDataReferenceImpl_GetId(IDirectXFileDataReference* iface, LPGUID pGuid) { IDirectXFileDataReferenceImpl *This = impl_from_IDirectXFileDataReference(iface); TRACE("(%p/%p)->(%p)\n", This, iface, pGuid); if (!pGuid) return DXFILEERR_BADVALUE; memcpy(pGuid, &This->ptarget->class_id, 16); return DXFILE_OK; }
/*** IUnknown methods ***/ static HRESULT WINAPI IDirectXFileDataReferenceImpl_QueryInterface(IDirectXFileDataReference* iface, REFIID riid, void** ppvObject) { IDirectXFileDataReferenceImpl *This = impl_from_IDirectXFileDataReference(iface); TRACE("(%p/%p)->(%s,%p)\n", iface, This, debugstr_guid(riid), ppvObject); if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectXFileObject) || IsEqualGUID(riid, &IID_IDirectXFileDataReference)) { IUnknown_AddRef(iface); *ppvObject = &This->IDirectXFileDataReference_iface; return S_OK; } /* Do not print an error for interfaces that can be queried to retrieve the type of the object */ if (!IsEqualGUID(riid, &IID_IDirectXFileData) && !IsEqualGUID(riid, &IID_IDirectXFileBinary)) ERR("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppvObject); return E_NOINTERFACE; }
/*** IDirectXFileObject methods ***/ static HRESULT WINAPI IDirectXFileDataReferenceImpl_GetName(IDirectXFileDataReference* iface, LPSTR pstrNameBuf, LPDWORD pdwBufLen) { IDirectXFileDataReferenceImpl *This = impl_from_IDirectXFileDataReference(iface); DWORD len; TRACE("(%p/%p)->(%p,%p)\n", This, iface, pstrNameBuf, pdwBufLen); if (!pdwBufLen) return DXFILEERR_BADVALUE; len = strlen(This->ptarget->name); if (len) len++; if (pstrNameBuf) { if (*pdwBufLen < len) return DXFILEERR_BADVALUE; CopyMemory(pstrNameBuf, This->ptarget->name, len); } *pdwBufLen = len; return DXFILE_OK; }
/*** IDirectXFileDataReference ***/ static HRESULT WINAPI IDirectXFileDataReferenceImpl_Resolve(IDirectXFileDataReference* iface, LPDIRECTXFILEDATA* ppDataObj) { IDirectXFileDataReferenceImpl *This = impl_from_IDirectXFileDataReference(iface); IDirectXFileDataImpl *object; HRESULT hr; TRACE("(%p/%p)->(%p)\n", This, iface, ppDataObj); if (!ppDataObj) return DXFILEERR_BADVALUE; hr = IDirectXFileDataImpl_Create(&object); if (FAILED(hr)) return hr; object->pobj = This->ptarget; object->cur_enum_object = 0; object->level = 0; object->from_ref = TRUE; *ppDataObj = (LPDIRECTXFILEDATA)object; return DXFILE_OK; }