-#define COMPTR(type, obj) &IID_##type, ((sizeof((obj)-(type **)(obj))), (obj))
+/* Type-checking macro to provide arguments for CoCreateInstance() etc.
+ * The pointer arithmetic is a compile-time pointer type check that 'obj'
+ * really is a 'type **', but is intended to have no effect at runtime. */
+#define COMPTR(type, obj) &IID_##type, \
+ (void **)(void *)((obj) + (sizeof((obj)-(type **)(obj))) \
+ - (sizeof((obj)-(type **)(obj))))