共用方式為


使用系統提供的代理程式

若要使用系統提供的 Surrogate 來服務 DLL 伺服器,請在登錄中將 DllSurrogate 值註冊為空字串或 NULL。 當指定的 DLL 伺服器提出啟用要求時,COM 會同時啟動預設的代理進程和要求的 DLL(在內部於啟動命令行中指定 CLSID),以避免個別呼叫。 (如需在代理程式中執行多個 DLL 伺服器的詳細資訊,請參閱 Surrogate Sharing.)

代理程式的預設實作是混合線程模型樣式虛擬 COM 伺服器。 將多個 DLL 伺服器載入單一代理程式時,此程式可確保每個 DLL 伺服器都會使用該伺服器登錄中指定的線程模型具現化。 所有載入的自由線程伺服器都會在多線程 Apartment 中一起存留,而每個 Apartment 線程伺服器都會位於單個線程 Apartment 中。 如果 DLL 伺服器支援這兩個線程模型,COM 會選擇多線程。

這個代理程序是如此編寫,使 COM 能夠同時處理 DLL 伺服器的卸載和代理程序的結束。 進程的生命週期主要是由代理中的封送處理物件數目決定,這是外部相依性的啟發性指標。雖然意圖是表示外部相依性,但此生命週期模型不會區分內部和外部的封送處理。 請小心避免意外地透過跨 Apartment 封送處理或透過全域介面數據表IAgileReference 等內部封送處理型機制來釘選 Surrogate。

系統提供的替代品對於大多數開發人員來說都非常出色,而且很容易使用。 不過,有特殊考慮的開發人員可能會決定需要自定義代理。 如需詳細資訊,請參閱 撰寫自定義代理