this book does exactly what I want as background for my first steps into Microsoft's world of COM
Francis Glassborow reviewed the predecessor of this book, 'Beginning ATL COM Programming' in C Vu 10.4 (May 1998)http://www.accu.org/bookreviews/public/reviews/b/b001572.htm) and most of Francis' comments there apply just as well to this new version.
It describes its target audience as 'fairly experienced C++ developers who want to get to grips with COM programming using the Active Template Library'. This is a category into which I fall myself. As such I may well have missed some technical errors. Wrox had, as of 20th April 2001, no errata at all listed for this book, which I find slightly worrying.
This book covers similar, but not identical, ground to 'Creating Lightweight Components with ATL' by Jonathan Bates, reviewed by Lawrence Dack in C Vu 13.1 (Feb 2001) (www.accu.org/bookreviews/public/reviews/c/c002283.htm).
The chapter titles provide a capsule summary An Introduction to COM; Writing a COM Component; Building and Calling a COM Object Using ATL; ATL Architecture; Automation and Error Handling; DCOM, Marshalling and Threading; ATL Window Classes; Connectable Components; Properties, Persistence and Collections; A Full Control. None of these topics is covered in exhaustive detail, but I have found enough general explanation to enable me to follow more detailed reference material such as Microsoft's MSDN online.
Readers have had widely different responses to this book (there are currently several thoughtful critical reviews on amazon.com). Several of the criticisms are of aspects I particularly liked, as readers seem to come to books with 'Beginning' in the title with very different expectations.
One such aspect is the 'beyond the wizard' approach used in many places. The ATL Wizards can create a great deal of boilerplate code for you, but if what they produce is not quite what you need, what do you do next? Grimes et al attempt to tell you. They discuss in some detail what the wizard-generated code is doing for you; make suggestions as to why you might want particular wizard-options and provide some examples of significantly changing wizard-generated code to do very different things. I found this approach very helpful, as I find a big conceptual gap between clicking the wizard buttons and creating ATL code from scratch and this book is a big help in filling it.
This book does not provide all the reference material you will need to work effectively with COM and ATL, nor does it provide a large number of detailed examples for you to copy and modify. A particular example that several readers would have liked is one devoted to difficulties in returning strings from a COM server. On the style of explanation opinions seem about evenly split. I like it, but many readers do not.
In summary, this book does exactly what I want as background for my first steps into Microsoft's world of COM. It will not be the only book on COM I read or need and it is not a book to learn C++ or C++ templates from. I would recommend it, but if possible look at it before you buy, as several readers disagree.