CoDisconnectObject 함수(combaseapi.h)
지정된 개체를 가리키는 모든 인터페이스 포인터를 대신하여 유지 관리되는 모든 원격 프로세스 연결을 끊습니다.
개체를 실제로 관리하는 프로세스만 CoDisconnectObject를 호출해야 합니다.
구문
HRESULT CoDisconnectObject(
[in] LPUNKNOWN pUnk,
[in] DWORD dwReserved
);
매개 변수
[in] pUnk
연결이 끊어질 개체의 IUnknown 에서 파생된 모든 인터페이스에 대한 포인터입니다.
[in] dwReserved
이 매개 변수는 예약되어 있으며 0이어야 합니다.
반환 값
이 함수는 S_OK 반환하여 원격 프로세스에 대한 모든 연결이 성공적으로 삭제되었음을 나타냅니다.
설명
CoDisconnectObject 함수를 사용하면 서버가 모든 외부 클라이언트와 pUnk로 지정된 개체의 연결을 올바르게 끊을 수 있습니다.
이 코드는 다음 작업을 수행합니다.
- 연결이 끊어질 개체가 IMarshal 인터페이스를 구현하는지 확인합니다. 이 경우 해당 인터페이스에 대한 포인터를 가져옵니다. 그렇지 않은 경우 표준 마샬러(즉, COM의) IMarshal 구현에 대한 포인터를 가져옵니다.
- 함수는 가져온 IMarshal 인터페이스 포인터를 사용하여 IMarshal::D isconnectObject 를 호출하여 모든 Out-of-process 클라이언트의 연결을 끊습니다.
마찬가지로 포함된 개체에 대한 외부 링크를 지원하는 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 |