システム提供サロゲートの使用
システム指定のサロゲートを DLL サーバーに使用するには、レジストリの DllSurrogate 値に空の文字列または NULL を指定する DLL を登録します。 指定された DLL サーバーのアクティブ化要求が COM に送信されると、COM は既定のサロゲート プロセスと要求された DLL を (起動コマンド ラインで内部的に CLSID を指定して) 同時に起動し、別の呼び出しを回避します。 (サロゲート プロセスで複数の DLL サーバーを実行する方法については、 サロゲート共有を参照してください。)
サロゲート プロセスの既定の実装は、混合スレッド モデル スタイルの擬似 COM サーバーです。 複数の DLL サーバーが 1 つのサロゲート プロセスに読み込まれると、このプロセスにより、そのサーバーのレジストリで指定されたスレッド モデルを使用して各 DLL サーバーがインスタンス化されます。 読み込まれたすべてのフリー スレッド サーバーはマルチスレッド アパートメントにまとめて配置され、各アパートメント スレッド サーバーはシングル スレッド アパートメントに配置されます。 DLL サーバーが両方のスレッド モデルをサポートしている場合、COM はマルチスレッドを選択します。
このサロゲート プロセスは、DLL サーバーのアンロードとサロゲート プロセスの終了の両方を COM が処理するように記述されます。 プロセスの有効期間は、主にサロゲート内のマーシャリングされたオブジェクトの数によって通知されされ、プロセスに対する外部依存関係のヒューリスティックな尺度として機能します。外部の依存関係を表すことが目的であっても、この有効期間モデルでは、インプロセスとアウトプロセス マーシャリングは区別されません。 アパートメント間マーシャリングや、グローバル インターフェイス テーブルや IAgileReference などのイン プロセッサ マーシャリング ベースのメカニズムを通じて、サロゲートを意図せずにピン留めしないように注意してください。
システム提供のサロゲートは、ほとんどの開発者にとって非常にうまく機能するだけでなく、非常に使いやすいです。 ただし、特別な考慮事項を持つ開発者は、カスタム サロゲートが必要であると判断する場合があります。 詳細については、「カスタム タスクの書き込み」を参照してください。