Chapter 6. Building Components with ATL

In this chapter:

You’ve learned practically all the fundamentals of COM in the last few chapters. You wrote the code from scratch using C++, with the help of a number of important COM API functions and standard interfaces. However, you might have noticed that most of the code that you wrote is boilerplate code. In other words, most of the code that you have to write is the same across all components. For example:

  • COM is purely based on COM interfaces. A COM object can implement a number of interfaces, but it must implement at least the IUnknown interface. Most of the code for IUnknown is boilerplate and to be blunt, the code for QueryInterface, AddRef, and Release is almost a replica from one implementation to another.

  • A COM object is created by its corresponding class factory, which usually implements the IClassFactory interface. As we’ve seen in Chapter 3, almost all of the code for IClassFactory is boilerplate.

  • A COM component hosts its supported COM classes. Its job is to expose the class objects or class factories associated with these COM classes to the world. If the COM component is an out-of-process server, then it registers its supported class objects with the SCM using CoRegisterClassObject. If it is an in-process server, then it exposes the DllGetClassObject and DllCanUnloadNow entry points, which will be called automatically by COM. Most of this ...

Get Learning DCOM now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.