Freigeben über


ATL und der freethreaded Marshaller

Die Attributseite des ATL-Assistenten für einfache Objekte enthält eine Option, die der Klasse ermöglicht, den Free-Threaded Marshaller (FTM) zu aggregieren.

Der Assistent generiert Code, um eine Instanz des Free-Threaded Marshallers in FinalConstruct zu erstellen und diese Instanz in FinalRelease freizugeben. Ein COM_INTERFACE_ENTRY_AGGREGATE-Makro wird automatisch der COM-Zuordnung hinzugefügt, um sicherzustellen, dass QueryInterface Anforderungen für IMarshal durch den Marshaller Free-Threaded bearbeitet wird.

Der Free-Threaded Marshaller ermöglicht Direktzugriff auf Schnittstellen für das Objekt von jedem Thread im gleichen Prozess und beschleunigt apartmentübergreifenden Aufrufe. Diese Option wird für Klassen ausgelöst, die beide Threadingmodell verwenden.

Wenn diese Option verwenden, müssen Klassen Verantwortung für Threadsicherheit ihrer Daten angewendet. Außerdem Objekte, die den Free-Threaded Marshaller aggregieren und Anforderung, Schnittstellenzeiger zu verwenden aus anderen Objekten muss zusätzliche Schritte unternehmen, um sicherzustellen, dass die abgerufenen Schnittstellen ordnungsgemäß gemarshallt werden. In der Regel bedeutet dies, die Schnittstellenzeiger zu speichern in die globale Schnittstellentabelle (GIT) mit ein und den Zeiger vom GIT abzurufen, wenn es verwendet wird. ATL stellt die Klasse CComGITPtr, die Ihnen helfen, die Schnittstellenzeiger zu verwenden, die im GIT gespeichert werden.

Siehe auch

Referenz

CoCreateFreeThreadedMarshaler

IMarshal

When to Use the Global Interface Table

In-Process Server Threading Issues

Weitere Ressourcen

ATL-Konzepte (Active Template Library)