Активные и неактивные серверы
Модуль класса является сервером или, другими словами, приложением, которое предоставляет сервис для приложений-клиентов. Когда создается объектная переменная для доступа к свойствам и методам класса, фактически происходит запуск исполняемого файла (DLL или ЕХЕ), который выполняется в фоновом режиме и ожидает связи. Каждый раз, когда происходит установка или чтение значения свойства или вызов метода, это приложение активируется, выполняет некоторые действия и, возможно, возвращает в приложение некоторые результаты.
Серверы могут быть реализованы как компоненты ActiveX EXE или ActiveX DLL. Эти две реализации отличаются тем. как созданный сервер работает. Компонент ActiveX DLL - это активный (in-process) сервер. DLL загружается в то же адресное пространство, что и исполняемый файл, вызвавший сервер, и работает "в одной упряжке" с клиентом. Однако в каждый момент времени работает либо приложение-клиент, либо DLL. Достоинством DLL является то, что они работают достаточно быстро, так как, в действительности, являются частью приложения, которое их использует. Компонент ActiveX EXE - это неактивный (out-of-process) сервер, который выполняется как отдельный процесс. Когда приложение-клиент впервые создает объект, предоставляемый ЕХЕ-сервером, сервер начинает выполняться как отдельный процесс. Если другое приложение-клиент создает аналогичный объект, новый объект предоставляется уже работающим экземпляром ЕХЕ-сервера. Другими словами, один ЕХЕ-сервер может обслуживать несколько клиентов. Неактивные серверы являются более эффективными в распределении ресурсов, но обмен информацией между серверами — медленный процесс. Скорость работы активных серверов выше.
Примером неактивного сервера является Excel. Можно запустить на выполнение два или более приложения, которые требуют услуг Excel (как показано в последней главе), и все они будут обслуживаться одним экземпляром Excel. Для приложений размера Excel нет смысла в вызове его нового экземпляра каждый раз, когда приложению Visual Basic необходимо вычислить выражение методом Evaluate. Если приложениям VB необходимо иметь доступ к различным рабочим листам, они могут быть открыты с помощью того же экземпляра Excel.