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

更新 : 2007 年 11 月

ATL シンプル オブジェクト ウィザードの [オプション] ページには、クラスでフリー スレッド マーシャラ (FTM: Free Threaded Marshaler) を集約できるようにするオプションが用意されています。

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

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

このオプションを使用するときは、クラスがデータのスレッド安全性を保証する必要があります。また、フリー スレッド マーシャラを集約し、別のオブジェクトから取得したインターフェイス ポインタを使用する必要のあるオブジェクトでは、インターフェイスが正しくマーシャリングされたかを保証するための追加の手順を行う必要があります。通常、この手順には、インターフェイス ポインタを GIT (Global Interface Table) に格納する処理と、ポインタの使用時に毎回 GIT からポインタを取得する処理が含まれます。ATL には、GIT に格納されているインターフェイス ポインタの使用に役立つ CComGITPtr クラスが用意されています。

参照

参照

CoCreateFreeThreadedMarshaler

IMarshal

When to Use the Global Interface Table

In-Process Server Threading Issues

その他の技術情報

ATL の概念