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


Метод IOleObject::Close (oleidl.h)

Изменяет внедренный объект с запущенного на загруженный. Отключает связанный объект от источника ссылки.

Синтаксис

HRESULT Close(
  [in] DWORD dwSaveOption
);

Параметры

[in] dwSaveOption

Указывает, должен ли объект сохраняться при переходе в загруженное состояние. Допустимые значения взяты из перечисления OLECLOSE.

Примечание Пользовательская модель OLE 2 рекомендует, чтобы объектные приложения не запрашивали пользователей перед сохранением связанных или внедренных объектов, в том числе активированных на месте. Эта политика представляет собой изменение пользовательской модели OLE 1, в которой объектные приложения всегда запрашивают у пользователя решение о сохранении изменений.
 

Возвращаемое значение

Этот метод возвращает значение S_OK при успешном завершении. Другие возможные возвращаемые значения включают следующее.

Код возврата Описание
OLE_E_PROMPTSAVECANCELLED
Пользователю было предложено сохранить, но в окне сообщения подсказки нажмите кнопку Отмена .

Комментарии

Примечания к вызывающим абонентам

Приложение-контейнер вызывает IOleObject::Close , когда требуется переместить объект из запущенного в загруженное состояние. После такого вызова объект по-прежнему отображается в контейнере, но не открыт для редактирования. Вызов IOleObject::Close для объекта, который загружен, но не запущен, не оказывает никакого влияния. Закрытие связанного объекта означает простое отключение его.

Примечания для разработчиков

После получения вызова IOleObject::Close выполняющийся объект должен выполнить следующие действия:
  • Если объект был изменен с момента последнего открытия для редактирования, он должен запросить сохранение в соответствии с инструкциями, указанными в dwSaveOption. Если параметр заключается в сохранении объекта, он должен вызвать интерфейс IOleClientSite::SaveObject своего контейнера.
  • Если объект имеет подключения IDataObject::D Advise с флагами ADVF_DATAONSTOP, он должен отправить уведомление IAdviseSink::OnDataChange . Дополнительные сведения см. в разделе IDataObject::D Advise .
  • Если объект в настоящее время владеет буфером обмена, он должен очистить его, вызвав OleFlushClipboard.
  • Если объект в настоящее время виден, уведомите его контейнер, вызвав IOleClientSite::OnShowWindow с аргументом fshow , равным FALSE.
  • Отправка уведомлений IAdviseSink::OnClose в соответствующие приемники рекомендаций.
  • Наконец, принудительно отключите все клиенты удаленного взаимодействия, вызвав CoDisconnectObject.
Если приложение объекта является локальным сервером (EXE, а не DLL), закрытие объекта также должно завершить работу объектного приложения, если последнее не поддерживает другие выполняющиеся объекты или не имеет другой причины для сохранения в запущенном состоянии. К таким причинам может относиться наличие блокировок IClassFactory::LockServer , управление приложением конечным пользователем или наличие других открытых документов, требующих доступа к приложению.

Вызов IOleObject::Close для связанного объекта отключает его от исходного приложения, но не завершает работу. Исходное приложение, которое отображается пользователю при закрытии объекта, остается видимым и запущенным после отключения и не отправляет уведомление IAdviseSink::OnClose в контейнер ссылок.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header oleidl.h

См. также раздел

CoDisconnectObject

IAdviseSink::OnClose

IClassFactory::LockServer

IDataObject::D Advise

IOleClientsite::onshowWindow

IOleClientSite::SaveObject

IOleObject

OLECLOSE

OleFlushClipboard