COM isn't so bad when you're using it with either a managed .NET language or VB6. It's only really annoying and confusing when you're using unmanaged C/C++.
The problem with the iTunes COM library is that it's just awful. Like I said, the events simply aren't firing (and I know I have that part right...it's not easy to screw
that up), the COM interface kills the connection when iTunes quits, causing exceptions up the ass if you try to do anything. Probably the most annoying feature is how it automatically starts iTunes when you create a new iTunesApp class. Seriously, ARGH. Why should I have to check to see if iTunes is running before I try to connect to it? Shouldn't the
external COM object take care of that?
I don't even want to get into the documentation. If you're morbidly curious, check it out here:
http://developer.apple.com/sdk/itunescomsdk.html. It's a small download. Just open it up in WinRAR or whatever and check the CHM. Good luck trying to figure out what the hell is going on with the COM object using just that.
The whole thing is just...bad. I'd rather deal with a fully blown SDK (ala Winamp or foobar) than that crap. But oh well, I'm kind of determined to hack around it and make it work at this point.
If nothing else, this should serve as a perfect example of code that has to be made convoluted and inelegant to wrap itself around something far nastier. Do take note.