The three books I learned most from Dale Rogerson's "Inside COM", Guy And Henry Eddon's "Inside DCOM" (its really more about COM), and Andrew W. Troelsen's "Workshop To COM And ATL 3.0". The only one of those with much ATL in it is Troelsen's book. Also very noteworthy are Jeff Glatt's online tutorials. Do a search for "COM In Plain C" for those. Very highly recommended.
I'll be perfectly honest about this - I never really learned this stuff until I did it in straight C. I was always interested in the details of what's going on with the virtual function tables, and if that interests you, its very unlikely you'll ever really understand it if you only deal with it at the C++ level. The reason I'm saying that is because the compiler sets all this up behind the scenes, and you never really see it. That's why I think Jeff Glatt's initial tutorial is so good.