Поделиться через


Использование суррогатного суррогата, предоставленного системой

Чтобы использовать суррогат, предоставленный системой для сервера DLL, зарегистрируйте библиотеку DLL, указав пустую строку или NULL для значения DllSurrogate в реестре. Когда запрос активации для сервера DLL, назначаемый таким образом, поступает на COM, COM запускает суррогатный процесс по умолчанию и запрошенную библиотеку DLL (задав CLSID во внутренней командной строке запуска), чтобы избежать отдельного вызова. (Сведения о запуске нескольких серверов DLL в суррогатном процессе см. в разделе Суррогатный общий доступ.)

Реализация суррогатного процесса по умолчанию — это псевдопотоковый сервер модели с смешанным потоком. При загрузке нескольких серверов DLL в один суррогатный процесс этот процесс гарантирует, что каждый сервер DLL создается с помощью модели потоков, указанной в реестре для этого сервера. Все загруженные бесплатные потоковые серверы будут жить вместе в многопоточной квартире, в то время как каждый сервер с потоком квартиры будет находиться в однопоточной квартире. Если сервер DLL поддерживает обе модели потоков, COM выберет многопоточность.

Этот суррогатный процесс записывается таким образом, чтобы COM обрабатывал как выгрузку серверов DLL, так и завершение суррогатного процесса. Время существования процесса в основном зависит от количества маршалированных объектов в суррогате, который выступает в качестве эвристической меры внешних зависимостей от процесса. Несмотря на то, что цель состоит в представлении внешних зависимостей, эта модель времени существования не различает маршалинг в proc и out-proc. Старайтесь непреднамеренно закреплять суррогат через маршалинг между квартирами или через механизмы на основе маршалинга на основе proc, такие как Глобальная таблица интерфейсов или IAgileReference.

Суррогат, предоставляемый системой, будет работать очень хорошо для большинства разработчиков, а также очень легко использовать. Тем не менее, эти разработчики с особыми соображениями могут решить, что требуется пользовательский суррогат. Дополнительные сведения см. в статье "Написание пользовательского суррогата".