Метод IHolder::Close (comsvcs.h)

Закрывает держатель.

Синтаксис

HRESULT Close();

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

Если этот метод завершается успешно, он возвращает S_OK. В противном случае возвращается код ошибки HRESULT .

Комментарии

При этом закроется держатель диспенсера ресурсов, после чего, вероятно, он освобождается.

Перед закрытием все оставшиеся запасы уничтожаются путем вызова метода IDispenserDriver::D eкистратор ресурсов.

В следующей последовательности описывается, как закрыть диспенсер ресурсов:

  1. Получите ссылку на средство распределения ресурсов (объект, предоставляющий IDispenserDriver).
  2. Вызовите метод в диспенсере ресурсов, реализация которого вызывает IHolder::Close.
  3. IHolder::Close уничтожает все оставшиеся запасы, вызывая метод IDispenserDriver::D etraitsResource в диспенсере ресурсов.
  4. IHolder::Close вызывает диспетчер диспенсеров, чтобы удалить этого владельца из списка держателей. (Если держателей не остается, объект Диспетчера дозатора удаляется сам.)
  5. IHolder::Close освобождает ссылку на интерфейс IDispenserDriver для диспенсера ресурсов. Это причина, по которой требуется ссылка на шаге 1; В противном случае средство распределения ресурсов удалит себя преждевременно, прежде чем можно будет выполнить последующие действия.
  6. IHolder::Close возвращается к диспенсеру ресурсов.
  7. Диспенсер ресурсов вызывает IDispenserDriver::D etraitsResource. Теперь владелец удаляет себя.
  8. Теперь возвращается метод, вызываемый на шаге 2.
  9. Опубликуйте последнюю ссылку на диспенсер ресурсов, который теперь удаляет себя.
Обратите внимание, что метод IDispenserManager::RegisterDispenser не вызывает AddRef для своего объекта pDispenserDriver , но IHolder::Close выполняет выпуск в pDispenserDriver. Это может привести к преждевременному уничтожению объекта "Диспенсер ресурсов". Чтобы предотвратить это преждевременное уничтожение, вызывающий объект IHolder::Close должен содержать ссылку на объект Resource Dispenser, как описано в шагах 1 и 5.

Требования

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

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

IDispenserDriver

IDispenserManager

IHolder