As Nikolay pointed out, the change
/* 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' */
is wrong because it changes offsets... but it also breaks those comments. (Can you put the vtable at the end?)
is wrong because it changes offsets... but it also breaks those comments. (Can you put the vtable at the end?)
In comctl32 v6, IImageList and HIMAGELIST are the same thing. See, for instance, http://msdn.microsoft.com/en-us/library/bb762185%28VS.85%29.aspx:
"The IImageList pointer type, such as that returned in the ppv parameter, can be cast as an HIMAGELIST as needed; for example, for use in a list view. Conversely, an HIMAGELIST can be cast as a pointer to an IImageList."
Obviously, the IImageList requires the vtable to be placed at the first offset.
If any applications do rely on the (undocumented) imagelist structure, then these patches will indeed break them. Nikolay's solution would be a possibility, although it would complicate the code a bit. I would probably prefer to wait and see if we get reports of anything actually breaking, but I realise others may disagree there.
Cheers,