-#define COMPTR(type, obj) &IID_##type, ((sizeof((obj)-(type **)(obj))), (obj))
+/* Type-checking macro to provide arguments for CoCreateInstance()
+ * etc, ensuring that 'obj' really is a 'type **'. */
+#define typecheck(checkexpr, result) \
+ (sizeof(checkexpr) ? (result) : (result))
+#define COMPTR(type, obj) &IID_##type, \
+ typecheck((obj)-(type **)(obj), (void **)(void *)(obj))