'Keep this text by your keyboard', it says on the cover. I like reference books. For me, an ideal reference book should be relatively short (depending on the size of the subject matter, of course), packed with information, well organised/laid out and integrated with a thorough index/set of cross-references. This book certainly succeeds in the first two, but I reserve judgement about the rest.
The first shorter half of the book consists of six chapters that introduce ATL and COM. It uses a case study of a products catalogue to demonstrate various facilities that ATL and VC++ 6 provide - App Wizard, Object Wizard, default implementations for common interfaces including enumerators, automation, OLE DB and windows, etc. Each chapter includes some introductory material on the topic, followed by the code changes required to enhance the case study. I found this part of the book somewhat disjointed. In some places, several pages are given over to show the lines of code that must be added, whereas in other places a one-liner states the goal and you are left to it. This part of the book is also littered with comments like 'If you need more details, see my other book, Professional ATL COM Programming'. This began to annoy me a little, after a while.
The second part of the book is where it comes more into its own. It consists of thirteen appendices, each of which covers a particular topic - ATL maps, registration, wizards, threading, class factories, windows and controls, smart pointers and string conversions, etc. There's a lot of material in this part, and it is, in general, organised much better. I expected a reference work to contain detailed, if summarised, information like this and this part fits better with my interpretation of a 'Programmer's Reference.' Overall I found it difficult to find things in this book, even after I had read the whole thing through. Some topics seemed to be discussed at different levels of detail in several different places, making it hard to find the information you want, even if you remember having read it someplace before. I think I would have preferred a much more ordered and tabular form of reference work. In a number of places the author lists the steps you need to go to, say, to make an object non-creatable, but these lists are again scattered throughout the book, so I found myself forever hunting for things. The same goes for discussions of EXE vs DLL servers, STAs vs MTAs, etc. This was exacerbated by an index (sixteen pages) that I found to be not very thorough.
I don't think I found a single thing that I looked up - none of the standard COM interfaces are indexed, for example. The book has a large number of typos in the text and code examples, implying sloppy editing. Finally, the narrow page width coupled with the perfect binding means that it won't stay flat and open, hardly useful for a text to be kept 'by your keyboard.'
In summary - lots of information, shame about the format/presentation/editing.