Nov 112007

I have begun to wonder just what it would take to create an ActiveX control for OpenVRML.

It has been about a decade since I touched COM. At the time, I had just (barely) learned C++. And I was struck then that just about every Good Practice for C++ I was learning about was being flagrantly violated in COM.

I quickly lost an affinity for Windows programming for that and many other reasons. I’ve done development primarily on POSIXy platforms; but much of that has been sufficiently portable to Windows that I’ve maintained a superficial knowledge of Windows development. But I’ve done enough development and I have a sufficiently deep understanding of C++ that something like COM just isn’t intimidating anymore. Which is not to suggest that I relish picking it up; but, rather, my annoyance at it is overcome by both a desire to show something working and a morbid curiosity about Just How Bad It Is.

My first thought was to apply the “modern” technique for building COM components, ATL. ATL is a template library; though the Wikipedia entry that (as of this writing) claims that ATL was patterned after the C++ STL is quite far off the mark. Aside from being written in C++ and using templates, there isn’t much similarity between the two. For the most part, ATL seems to be a bunch of CRTP mixin class templates. I can see how I would value the legwork it saves me if I had 10 or 20 or 100 COM components to write. But as I have just one, the obfuscation implicit in ATL usage seems unlikely to pay off.

And it’s just as well. Apparently Microsoft no longer includes ATL with the Windows, née Platform, SDK. So if I want this thing to build with the Express version of the compiler, no ATL.

It’s a bit too early to say if this effort will actually pay off in terms of a usable OpenVRML ActiveX control. It could happen. It could also be the case that I become so put off with the API that I never consider doing this again.