On Thu Jun 9 13:37:43 2022 +0000, Huw Davies wrote:
Releasing the ifaces before comparing them looks odd. This is also done in the tests of the third patch.
Yeah, this is something I've borrowed from the oleacc tests, particularly the iface_cmp() function:
``` static BOOL iface_cmp(IUnknown *iface1, IUnknown *iface2) { IUnknown *unk1, *unk2;
if(iface1 == iface2) return TRUE;
IUnknown_QueryInterface(iface1, &IID_IUnknown, (void**)&unk1); IUnknown_Release(unk1); IUnknown_QueryInterface(iface2, &IID_IUnknown, (void**)&unk2); IUnknown_Release(unk2); return unk1 == unk2; } ```
Does it make a difference for comparing the IUnknown pointers if the interface is released? I think in this way, it's just easier than checking, saving the check, then releasing.
This also applies to the prior `if (acc == acc2)` check you commented on, with the idea being that you can early out if the interface pointers match, and avoid a QI to try and match the IUnknown's.