On Wed, Nov 11, 2009 at 12:11 AM, Owen Rudge orudge@codeweavers.com wrote:
dlls/comctl32/imagelist.c | 322 ++++++++++++++++++++++++++++++++++++++++++++- dlls/comctl32/imagelist.h | 3 + 2 files changed, 319 insertions(+), 6 deletions(-)
After that: --- diff --git a/dlls/comctl32/imagelist.h b/dlls/comctl32/imagelist.h index 73ccd8a..51b8635 100644 --- a/dlls/comctl32/imagelist.h +++ b/dlls/comctl32/imagelist.h @@ -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 */ ---
let's pray that nobody depends on structure layout :). If it'll be a problem the possible solution could be to use two structure types - one for traditional API and one for com-based. Choosing one of it could be done possibly in ImageList_Create checking for manifest enabled in activation context. All traditional calls should check for that then and apply an offset to pointer to get HIMAGELIST without vtbl. We'll see...