Owen Rudge <orudge(a)codeweavers.com> writes:
> @@ -2926,10 +2927,295 @@ ImageList_SetColorTable (HIMAGELIST himl, UINT uStartIndex, UINT cEntries, CONST
> HRESULT WINAPI
> ImageList_CoCreateInstance (REFCLSID rclsid, const IUnknown *punkOuter, REFIID riid, void **ppv)
> {
> - FIXME("STUB: %s %p %s %p\n", debugstr_guid(rclsid), punkOuter, debugstr_guid(riid), ppv);
> - return E_NOINTERFACE;
> + TRACE("(%s,%p,%s,%p)\n", debugstr_guid(rclsid), punkOuter, debugstr_guid(riid), ppv);
> +
> + if (!IsEqualIID(&IID_IImageList, riid))
> + return E_NOINTERFACE;
You should be checking the clsid here. The iid is checked in
QueryInterface.
> @@ -2948,6 +3234,38 @@ ImageList_CoCreateInstance (REFCLSID rclsid, const IUnknown *punkOuter, REFIID r
> HRESULT WINAPI
> HIMAGELIST_QueryInterface (HIMAGELIST himl, REFIID riid, void **ppv)
> {
> - FIXME("STUB: %p %s %p\n", himl, debugstr_guid(riid), ppv);
> - return E_NOINTERFACE;
> + TRACE("(%p,%s,%p)\n", himl, debugstr_guid(riid), ppv);
> +
> + *ppv = NULL;
> +
> + /* TODO: IID_IImageList2 support */
> + if (!IsEqualIID(&IID_IImageList, riid))
> + return E_NOINTERFACE;
This one is redundant too.
> @@ -30,6 +30,9 @@
> /* the ones with offsets at the end are the same as in Windows */
> struct _IMAGELIST
> {
> + const struct IImageListVtbl *lpVtbl;/* IImageList vtable */
> + LONG ref; /* reference count */
> +
> DWORD magic; /* 00: 'SAMX' */
> INT cCurImage; /* 04: ImageCount */
> INT cMaxImage; /* 08: maximages */
Please update the comment since the offsets no longer match Windows.
--
Alexandre Julliard
julliard(a)winehq.org