Whether it's desirable or not is up for debate, but personally I prefer this approach. It's also the approach that's taken for xactengine and d3dcompiler, for whatever that's worth.
This is quite compelling: ``` configure | 1 + configure.ac | 1 + dlls/xapofx1_1/Makefile.in | 2 + dlls/xapofx1_2/Makefile.in | 2 + dlls/xapofx1_3/Makefile.in | 2 + dlls/xapofx1_4/Makefile.in | 2 + dlls/xapofx1_5/Makefile.in | 2 + dlls/xaudio2_0/Makefile.in | 1 - dlls/xaudio2_1/Makefile.in | 1 - dlls/xaudio2_2/Makefile.in | 1 - dlls/xaudio2_3/Makefile.in | 1 - dlls/xaudio2_4/Makefile.in | 1 - dlls/xaudio2_5/Makefile.in | 1 - dlls/xaudio2_6/Makefile.in | 1 - dlls/xaudio2_7/Makefile.in | 1 - dlls/xaudio2_7/compat.c | 2853 ------------------------------------------------------------------------------------------------------------------------ dlls/xaudio2_7/tests/Makefile.in | 3 + dlls/xaudio2_7/tests/xaudio2.c | 451 ++++++++----------- dlls/xaudio2_7/tests/xaudio_classes.idl | 24 ++ dlls/xaudio2_7/xapo.c | 168 +++++--- dlls/xaudio2_7/xaudio_classes.idl | 186 +------- dlls/xaudio2_7/xaudio_dll.c | 389 +++++++++-------- dlls/xaudio2_7/xaudio_private.h | 69 +-- dlls/xaudio2_8/Makefile.in | 2 +- dlls/xaudio2_8/tests/Makefile.in | 9 + dlls/xaudio2_9/Makefile.in | 1 - include/xaudio2.idl | 1065 +++++++++------------------------------------ include/xaudio2fx.idl | 124 ++---- 28 files changed, 783 insertions(+), 4581 deletions(-) ```