Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Когда клиент службы автоматизации создает или активирует элемент OLE, сервер передает клиенту указатель на этот объект. Клиент устанавливает ссылку на объект с помощью вызова функции OLE IUnknown::AddRef. Эта ссылка действует до тех пор, пока клиент не вызывает IUnknown::Release. (Клиентские приложения, написанные с помощью классов OLE-классов библиотеки Microsoft Foundation, не должны выполнять эти вызовы; платформа делает это.) Система OLE и сам сервер могут устанавливать ссылки на объект. Сервер не должен уничтожить объект до тех пор, пока внешние ссылки на объект остаются в силе.
Платформа поддерживает внутреннее число ссылок на любой серверный объект, производный от CCmdTarget. Это число обновляется, когда клиент службы автоматизации или другая сущность добавляет или освобождает ссылку на объект.
Когда счетчик ссылок становится равным 0, фреймворк вызывает виртуальную функцию CCmdTarget::OnFinalRelease. Реализация этой функции по умолчанию вызывает delete
оператор для удаления этого объекта.
Библиотека классов Microsoft Foundation предоставляет дополнительные средства для управления поведением приложений, когда внешние клиенты имеют ссылки на объекты приложения. Помимо поддержания количества ссылок на каждый объект, серверы поддерживают глобальное число активных объектов. Глобальные функции AfxOleLockApp и AfxOleUnlockApp обновляют количество активных объектов приложения. Если это число ненулевое, приложение не завершает работу, когда пользователь выбирает закрыть из системного меню или выйти из меню "Файл". Вместо этого основное окно приложения остается скрытым (но не уничтоженным), пока не будут завершены все ожидающие запросы клиента. Как правило, AfxOleLockApp
и AfxOleUnlockApp
вызываются в конструкторах и деструкторах соответственно классов, поддерживающих автоматизацию.
Иногда обстоятельства принудительно завершают работу сервера, пока клиент по-прежнему имеет ссылку на объект. Например, ресурс, на котором зависит сервер, может стать недоступным, что приводит к возникновению ошибки сервера. Пользователь также может закрыть серверный документ, содержащий объекты, на которые имеются ссылки других приложений.
В наборе SDK для Windows см. также IUnknown::AddRef
и IUnknown::Release
.