IHolder::Close 메서드(comsvcs.h)

홀더를 닫습니다.

구문

HRESULT Close();

반환 값

메서드가 성공하면 S_OK를 반환하고, 그러지 않으면 HRESULT 오류 코드를 반환합니다.

설명

이렇게 하면 리소스 디스펜서의 홀더가 닫히며, 그 후에는 리소스 디스펜서가 릴리스될 수 있습니다.

닫기 전에 리소스 디스펜서의 IDispenserDriver::D estroyResource 메서드로 다시 호출하여 나머지 인벤토리가 제거됩니다.

다음 시퀀스는 리소스 디스펜서를 닫는 방법을 설명합니다.

  1. 리소스 디스펜서( IDispenserDriver를 노출하는 개체)에 대한 참조를 가져옵니다.
  2. 구현이 IHolder::Close를 호출하는 Resource Dispenser에서 메서드를 호출합니다.
  3. IHolder::Close 는 리소스 디스펜서의 IDispenserDriver::D estroyResource 메서드로 다시 호출하여 남은 인벤토리를 삭제합니다.
  4. IHolder::Close 는 디스펜서 관리자를 호출하여 홀더 목록에서 이 홀더를 제거합니다. (보유자가 남아 있지 않으면 디스펜서 관리자 개체가 자체 삭제됩니다.)
  5. IHolder::Close 는 리소스 디스펜서의 IDispenserDriver 인터페이스에 대한 참조를 릴리스합니다. 이는 1단계에서 참조가 필요한 이유입니다. 그렇지 않으면 후속 단계를 완료하기 전에 리소스 디스펜서가 조기에 삭제됩니다.
  6. IHolder::Close 는 리소스 디스펜서로 돌아갑니다.
  7. 리소스 디스펜서는 IDispenserDriver::D estroyResource를 호출합니다. 이제 홀더가 자체 삭제됩니다.
  8. 이제 2단계에서 호출된 메서드가 반환됩니다.
  9. 리소스 디스펜서에 대한 최종 참조를 해제합니다. 이 참조는 이제 자체 삭제됩니다.
IDispenserManager::RegisterDispenser 메서드는 pDispenserDriver 개체에서 AddRef를 호출하지 않지만 IHolder::ClosepDispenserDriver에서 릴리스를 수행합니다. 이로 인해 리소스 디스펜서 개체가 조기에 제거될 수 있습니다. 이러한 조기 소멸을 방지하려면 IHolder::Close 호출자가 1단계 및 5단계에 설명된 대로 Resource Dispenser 개체에 대한 참조를 보유해야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 comsvcs.h

추가 정보

IDispenserDriver

IDispenserManager

IHolder