다음을 통해 공유


CoDisconnectObject 함수(combaseapi.h)

지정된 개체를 가리키는 모든 인터페이스 포인터를 대신하여 유지 관리되는 모든 원격 프로세스 연결을 끊습니다.

개체를 실제로 관리하는 프로세스만 CoDisconnectObject를 호출해야 합니다.

구문

HRESULT CoDisconnectObject(
  [in] LPUNKNOWN pUnk,
  [in] DWORD     dwReserved
);

매개 변수

[in] pUnk

연결이 끊어질 개체의 IUnknown 에서 파생된 모든 인터페이스에 대한 포인터입니다.

[in] dwReserved

이 매개 변수는 예약되어 있으며 0이어야 합니다.

반환 값

이 함수는 S_OK 반환하여 원격 프로세스에 대한 모든 연결이 성공적으로 삭제되었음을 나타냅니다.

설명

CoDisconnectObject 함수를 사용하면 서버가 모든 외부 클라이언트와 pUnk로 지정된 개체의 연결을 올바르게 끊을 수 있습니다.

이 코드는 다음 작업을 수행합니다.

  1. 연결이 끊어질 개체가 IMarshal 인터페이스를 구현하는지 확인합니다. 이 경우 해당 인터페이스에 대한 포인터를 가져옵니다. 그렇지 않은 경우 표준 마샬러(즉, COM의) IMarshal 구현에 대한 포인터를 가져옵니다.
  2. 함수는 가져온 IMarshal 인터페이스 포인터를 사용하여 IMarshal::D isconnectObject 를 호출하여 모든 Out-of-process 클라이언트의 연결을 끊습니다.
개체의 클라이언트는 서버에서 연결을 끊기 위해 CoDisconnectObject 를 호출하지 않습니다(클라이언트는 이 목적을 위해 IUnknown::Release 를 사용해야 합니다). 대신 OLE 서버는 CoDisconnectObject 를 호출하여 일반적으로 서버 애플리케이션을 닫는 사용자에 대한 응답으로 개체의 클라이언트 연결을 강제로 끊습니다.

마찬가지로 포함된 개체에 대한 외부 링크를 지원하는 OLE 컨테이너는 CoDisconnectObject 를 호출하여 해당 링크를 삭제할 수 있습니다. 다시 말하지만, 이 호출은 일반적으로 애플리케이션을 닫는 사용자에 대한 응답으로 수행됩니다. 컨테이너는 먼저 모든 OLE 개체에 대해 IOleObject::Close 를 호출해야 하며, 각 개체는 다양한 클라이언트에 IAdviseSink::OnClose 알림을 보내야 합니다. 그런 다음 컨테이너는 CoDisconnectObject 를 호출하여 기존 연결을 닫을 수 있습니다.

CoDisconnectObject 에서 프로세스 외 클라이언트의 연결을 즉시 끊을 필요는 없습니다. 서버 개체에서 마샬링된 호출이 보류 중인 경우 CoDisconnectObject 는 해당 호출이 반환된 경우에만 개체의 연결을 끊습니다. 그 동안 CoDisconnectObject 는 새 마샬링된 호출이 CO_E_OBJNOTCONNECTED 반환하도록 하는 플래그를 설정합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows 2000 Server [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 combaseapi.h(Objbase.h 포함)
라이브러리 Ole32.lib
DLL Ole32.dll

추가 정보

IAdviseSink::OnClose

IMarshal::D isconnectObject

IOleObject::Close