static HRESULT WINAPI d3d9_QueryInterface(IDirect3D9Ex *iface, REFIID riid, void **out) { struct d3d9 *d3d9 = impl_from_IDirect3D9Ex(iface); TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out); if (IsEqualGUID(riid, &IID_IDirect3D9) || IsEqualGUID(riid, &IID_IUnknown)) { IDirect3D9Ex_AddRef(&d3d9->IDirect3D9Ex_iface); *out = &d3d9->IDirect3D9Ex_iface; return S_OK; } if (IsEqualGUID(riid, &IID_IDirect3D9Ex)) { if (!d3d9->extended) { WARN("Application asks for IDirect3D9Ex, but this instance wasn't created with Direct3DCreate9Ex.\n"); *out = NULL; return E_NOINTERFACE; } IDirect3D9Ex_AddRef(&d3d9->IDirect3D9Ex_iface); *out = &d3d9->IDirect3D9Ex_iface; return S_OK; } WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid)); *out = NULL; return E_NOINTERFACE; }
/* IDirect3D9 IUnknown parts follow: */ static HRESULT WINAPI IDirect3D9Impl_QueryInterface(LPDIRECT3D9EX iface, REFIID riid, LPVOID* ppobj) { IDirect3D9Impl *This = (IDirect3D9Impl *)iface; TRACE("iface %p, riid %s, object %p.\n", iface, debugstr_guid(riid), ppobj); if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirect3D9)) { IDirect3D9Ex_AddRef(iface); *ppobj = This; TRACE("Returning IDirect3D9 interface at %p\n", *ppobj); return S_OK; } else if(IsEqualGUID(riid, &IID_IDirect3D9Ex)) { if(This->extended) { *ppobj = This; TRACE("Returning IDirect3D9Ex interface at %p\n", *ppobj); IDirect3D9Ex_AddRef((IDirect3D9Ex *)*ppobj); return S_OK; } else { WARN("Application asks for IDirect3D9Ex, but this instance wasn't created with Direct3DCreate9Ex\n"); WARN("Returning E_NOINTERFACE\n"); *ppobj = NULL; ERR_D3D(); return E_NOINTERFACE; } } WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj); *ppobj = NULL; ERR_D3D(); return E_NOINTERFACE; }