ATL und der freethreaded Marshaller

Die Seite "Attribute" des ATL-Assistenten für einfache Objekte bietet eine Option, mit der Ihre Klasse den freien Thread-Marshaler (FTM) aggregieren kann.

Der Assistent generiert Code, um eine Instanz des kostenlosen Thread-Marshalers zu FinalConstruct erstellen und diese Instanz in FinalReleasefreizugeben. Dem COM-Schema wird automatisch ein COM_INTERFACE_ENTRY_AGGREGATE Makro hinzugefügt, um sicherzustellen, dass QueryInterface Anforderungen für IMarshal vom freien Thread-Marshaler behandelt werden.

Der kostenlose Thread-Marshaler ermöglicht direkten Zugriff auf Schnittstellen für Ihr Objekt von einem beliebigen Thread im selben Prozess und beschleunigt mehr Wohnungsübergreifende Aufrufe. Diese Option ist für Klassen vorgesehen, die das Beide Threadingmodell verwenden.

Bei Verwendung dieser Option müssen Klassen die Verantwortung für die Threadsicherheit ihrer Daten übernehmen. Darüber hinaus müssen Objekte, die den freien Thread-Marshaler aggregieren und Schnittstellenzeiger verwenden müssen, die von anderen Objekten abgerufen wurden, zusätzliche Schritte ausführen, um sicherzustellen, dass die Schnittstellen ordnungsgemäß gemarstet werden. Dies umfasst in der Regel das Speichern der Schnittstellenzeiger in der globalen Schnittstellentabelle (GIT) und das Abrufen des Zeigers von git jedes Mal, wenn er verwendet wird. ATL stellt die Klasse CComGITPtr bereit, die Ihnen bei der Verwendung von Schnittstellenzeigern hilft, die in der GIT gespeichert sind.

Siehe auch

Konzepte
CoCreateFreeThreadedMarshaler
IMarshal
Gründe für die Verwendung der globalen Schnittstellentabelle
In-Process-Serverthreading-Probleme