ATL and the Free Threaded Marshaler
For the latest documentation on Visual Studio 2017 RC, see Visual Studio 2017 RC Documentation.
The ATL Simple Object Wizard's Attributes page provides an option that allows your class to aggregate the free threaded marshaler (FTM).
The wizard generates code to create an instance of the free threaded marshaler in
FinalConstruct and release that instance in
COM_INTERFACE_ENTRY_AGGREGATE macro is automatically added to the COM map to ensure that
QueryInterface requests for IMarshal are handled by the free threaded marshaler.
The free threaded marshaler allows direct access to interfaces on your object from any thread in the same process, speeding up cross-apartment calls. This option is intended for classes that use the Both threading model.
When using this option, classes must take responsibility for the thread-safety of their data. In addition, objects that aggregate the free threaded marshaler and need to use interface pointers obtained from other objects must take extra steps to ensure that the interfaces are correctly marshaled. Typically this involves storing the interface pointers in the global interface table (GIT) and getting the pointer from the GIT each time it is used. ATL provides the class CComGITPtr to help you use interface pointers stored in the GIT.