Hi everyone! I’m working on Legacy Update 1.12, where I’ve made a pretty major under-the-hood change. Now seems like a good time to release this for beta testing.
I’ve refactored the ActiveX control code to be built with the open-source MinGW compiler, rather than Microsoft’s Visual Studio 2008 (and a bit of 2010, and 2017, and 2022… you can see why I wanted to get rid of this).
Windows is heavily built around the Component Object Model. It’s a neat system where components of the OS can easily talk to each other, and third-party apps can extend the OS with new features. ActiveX is one of systems built on top of COM. With the great power of COM comes great amounts of code to interface with it. Microsoft “simplified” this for developers with Active Template Library, which generates most of the code for you through copious amounts of compiler magic. This relies on non-standard features of the Visual C++ compiler, and at any rate I was feeling paranoid about whether all the code it generates is even necessary.
So I started removing the ATL magic, and started writing that code by hand. It worked really well, and it reduced the combined size of the 32-bit and 64-bit ActiveX control dlls by 18%. Thanks to the wonders of file compression, the setup exe download is also now 24% smaller. Visual C++ 2008 (for 32-bit) and 2017 (for 64-bit) produce fairly different code, while our new streamlined MinGW toolchain is identical between both 32-bit and 64-bit (aside from the machine instructions of course), so they compress together really well.
This allowed me to better understand how ActiveX works, which made me realise there was a fair amount of dead code - a single line of ATL template magic could end up compiling thousands of lines of code that weren’t even being used. I also got the impression that a lot of what I needed to implement simply hasn’t been done with MinGW before. Perhaps the only project that does so is Wine. Hopefully I’m wrong?

