The Basic ATL COM Map

 < Free Open Study > 



When developing coclasses with ATL, you become dependent upon a table driven implementation of QueryInterface(). As we have seen in Chapter 7, the COM map is a NULL-terminated array of _ATL_INTMAP_ENTRY structures. Most of the time this array is populated by the COM_INTERFACE_ENTRY macro, used whenever you are supporting a COM interface using C++ multiple inheritance:

// A typical COM map. BEGIN_COM_MAP(CoSalesEmployee)      COM_INTERFACE_ENTRY(ICalcCommission)      COM_INTERFACE_ENTRY(ISmileAlot)      COM_INTERFACE_ENTRY(IPersonalInfo) END_COM_MAP()

COM_INTERFACE_ENTRY makes use of the offsetofclass() macro to calculate the correct vPtr for a given COM interface:

// The de facto ATL COM map macro. #define COM_INTERFACE_ENTRY(x)\      {&_ATL_IIDOF(x), \      offsetofclass(x, _ComMapClass), \      _ATL_SIMPLEMAPENTRY},

This chapter discusses a number of additional coclass implementation techniques (and related COM map macros) beyond simple multiple inheritance. We begin by examining some advanced topics such as nested classes, tear-off interfaces, and resolution of method name clashes. To wrap up this chapter, you will learn how to achieve binary reuse using COM containment and COM aggregation.



 < Free Open Study > 



Developer's Workshop to COM and ATL 3.0
Developers Workshop to COM and ATL 3.0
ISBN: 1556227043
EAN: 2147483647
Year: 2000
Pages: 171

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net