ATL とフリー スレッド マーシャラー

ATL シンプル オブジェクト ウィザードの属性ページでは、ご使用のクラスでフリー スレッド マーシャラー (FTM) を集計できるようにするオプションを示します。

このウィザードでは、FinalConstruct でフリー スレッド マーシャラーのインスタンスを作成し、FinalRelease でそのインスタンスを解放するコードを生成します。 COM_INTERFACE_ENTRY_AGGREGATE マクロは、IMarshal に対する QueryInterface 要求がフリー スレッド マーシャラーによって確実に処理されるように、COM マップに自動的に追加されます。

フリー スレッド マーシャラーを使用すると、同じプロセス内の任意のスレッドからオブジェクトのインターフェイスに直接アクセスし、アパートメント間の呼び出しを高速化できます。 このオプションは、両方のスレッド モデルを使用するクラスを対象にしています。

このオプションを使用する場合、クラスはそのデータのスレッド セーフに対して責任を負う必要があります。 さらに、フリー スレッド マーシャラーを集計し、他のオブジェクトから取得したインターフェイス ポインターを使用する必要があるオブジェクトは、インターフェイスが正しくマーシャリングされることを確実にするために追加の手順を行う必要があります。 通常、これには、インターフェイス ポインターをグローバル インターフェイス テーブル (GIT) に格納し、使用されるごとに GIT からポインターを取得する必要があります。 ATL には、GIT に格納されているインターフェイス ポインターを使用するのに役立つ、CComGITPtr クラスが用意されています。

関連項目

概念
CoCreateFreeThreadedMarshaler
IMarshal
グローバル インターフェイス テーブルを使用する場合
インプロセス サーバーのスレッドの問題