I've had my first acquaintance with COM this week, and I must admit I like the idea. COM allows people to write code in one language / environment and use it in another, perhaps one they never imagined it would be used in.

Write code in Java, use it in Perl. Write code in C++, use it in Visual Basic. It's all made quite simple by COM.

Specifically, I have a certain hardware driver wrapped in a COM library (and written in Java) that I must use from a programming environment called ATEasy (a proprietary language for test-equipment control computers).

We've made quite a progress of understanding how to pass arguments in and out, access the relevant interfaces, and so on, but we're still having problems with Variants. COM uses Variants to pass complex objects (including arrays, it seems) from the implementation to the user, and back. There are some issues with memory allocation (what else !) - who allocates memory, who deletes it, and so on.
Although at the moment we're quite stuck, I think it will work eventually. All in all, it's an interesting experience.