ATL とフリー スレッド マーシャラー
ATL シンプル オブジェクト ウィザードの [オプション] ページには、クラスでフリー スレッド マーシャラー (FTM: Free Threaded Marshaler) を集約できるようにするオプションが用意されています。
ウィザードでは、フリー スレッド マーシャラーのインスタンスを FinalConstruct で作成し、FinalRelease で解放するコードが生成されます。 COM_INTERFACE_ENTRY_AGGREGATE マクロが COM マップに自動的に追加されて、IMarshal に対する QueryInterface 要求がフリー スレッド マーシャラーによって処理されることを保証します。
フリー スレッド マーシャラーを使用すると、同じプロセス内の任意のスレッドからオブジェクトのインターフェイスに直接アクセスできるため、アパートメント間の呼び出しを高速化できます。 このオプションは、Both スレッド モデルを使用するクラス用です。
このオプションを使用するときは、クラスがデータのスレッド安全性を保証する必要があります。 また、フリー スレッド マーシャラーを集約し、別のオブジェクトから取得したインターフェイス ポインターを使用する必要のあるオブジェクトでは、インターフェイスが正しくマーシャリングされたかを保証するための追加の手順を行う必要があります。 通常、この手順には、インターフェイス ポインターを GIT (Global Interface Table) に格納する処理と、ポインターの使用時に毎回 GIT からポインターを取得する処理が含まれます。 ATL には、GIT に格納されているインターフェイス ポインターの使用に役立つ CComGITPtr クラスが用意されています。
参照
参照
When to Use the Global Interface Table
In-Process Server Threading Issues