I incorrectly assumed that COBJMACROS was necessary for all such wrappers; it seems that's not the case.
This patch series was motivated by a patch I wrote to convert d3d9.h and some other headers into IDLs. This does seem like quite a lot of an improvement in several respects, but it also breaks subtle aspects of header compatibility like this. I don't know how much we care about those though.