CoLockObjectExternal 함수(combaseapi.h)
개체가 메모리에 유지되도록 개체를 잠그거나 이러한 잠금을 해제하기 위해 호출됩니다.
구문
HRESULT CoLockObjectExternal(
[in] LPUNKNOWN pUnk,
[in] BOOL fLock,
[in] BOOL fLastUnlockReleases
);
매개 변수
[in] pUnk
잠기거나 잠금 해제할 개체의 IUnknown 인터페이스에 대한 포인터입니다.
[in] fLock
개체를 잠글지 해제할지 여부를 나타냅니다. 이 매개 변수가 TRUE이면 개체는 AddRef/릴리스 작업, 등록 또는 해지와 관계없이 메모리에 유지됩니다. 이 매개 변수가 FALSE이면 이전에 이 함수를 호출하여 설정한 잠금이 해제됩니다.
[in] fLastUnlockReleases
잠금이 개체를 활성 상태로 유지해야 하는 마지막 참조인 경우 TRUE 를 지정하여 개체에 대한 모든 포인터를 해제합니다(개체를 활성 상태로 유지하지 않아야 하는 다른 참조가 있을 수 있음). 그렇지 않으면 FALSE를 지정 합니다.
fLock이 TRUE이면 이 매개 변수는 무시됩니다.
반환 값
이 함수는 표준 반환 값 E_INVALIDARG, E_OUTOFMEMORY, E_UNEXPECTED 및 S_OK 반환할 수 있습니다.
설명
CoLockObjectExternal 함수는 개체가 실제로 상주하는 프로세스(처리기가 로드될 수 있는 프로세스가 아닌 EXE 프로세스)에서 호출되어야 합니다.
CoLockObjectExternal 함수는 개체의 참조 수가 0으로 이동하지 않도록 하여 잠금이 해제될 때까지 존재하도록 "잠글" 수 있습니다. 매개 변수가 다른 동일한 함수가 잠금을 해제합니다. 잠금은 개체에서 시스템 호출 IUnknown::AddRef 를 사용하여 구현됩니다. 그런 다음 FLock이 FALSE로 설정된 CoLockObjectExternal을 나중에 호출할 때까지 시스템에서 개체에서 IUnknown::Release를 호출하기 위해 대기합니다. 이 함수는 사용자와 마찬가지로 개체 외부에서 작동하기 때문에 최종 사용자를 대신하여 개체에 대한 참조 횟수를 유지하는 데 사용할 수 있습니다.
최종 사용자는 외부 잠금이 있더라도 애플리케이션의 수명을 명시적으로 제어할 수 있습니다. 즉, 사용자가 애플리케이션을 닫기로 결정한 경우 종료해야 합니다. 외부 잠금(예: CoLockObjectExternal에서 설정한 잠금)이 있는 경우 애플리케이션은 CoDisconnectObject 함수를 호출하여 종료하기 전에 이러한 연결을 강제로 닫을 수 있습니다.
CoLockObjectExternal을 호출하는 경우 개체에 대한 강력한 잠금이 설정됩니다. 강력한 잠금은 개체를 메모리에 유지하지만 약한 잠금은 유지하지 않습니다. 예를 들어 OLE 포함을 자동으로 업데이트하는 동안 강력한 잠금이 필요합니다. 포함된 개체의 컨테이너는 업데이트 프로세스가 완료될 때까지 메모리에 남아 있어야 합니다. 또한 애플리케이션이 클라이언트에 서비스 제공을 완료할 때까지 애플리케이션이 활성 상태로 유지되도록 하려면 애플리케이션 개체에 대한 강력한 잠금이 있어야 합니다. 모든 외부 참조는 개체에 강력한 참조 잠금을 배치합니다.
CoLockObjectExternal 함수는 일반적으로 다음과 같은 상황에서 호출됩니다.
- 개체 서버는 표시될 때 fLock 및 fLastLockReleases가 모두 TRUE로 설정된 CoLockObjectExternal을 호출해야 합니다. 이 호출은 사용자를 대신하여 강력한 잠금을 만듭니다. 애플리케이션이 닫히면 CoLockObjectExternal을 호출하여 잠금을 해제하고 fLock 을 FALSE 로 설정하고 fLastLockReleases 를 TRUE로 설정합니다.
- 서버에서 CoLockObjectExternal 에 대한 호출은 IOleContainer::LockContainer 구현에도 사용할 수 있습니다.
애플리케이션이 CoLockObjectExternal 호출을 통해 애플리케이션의 모든 측면을 관리하고 문서 종료를 완전히 관리하지 않는 한, 컨테이너는 잠금 수가 0에 도달하고 컨테이너가 보이지 않는 경우 종료되도록 LockContainer 에 프라이빗 잠금 수를 유지해야 합니다. 종료의 모든 측면을 유지 관리하고 프라이빗 잠금 수를 유지하지 않도록 하려면 다음 조건 중 하나가 발생할 때마다 CoLockObjectExternal 을 호출해야 합니다.
- 문서가 만들어지고 제거되거나 표시되거나 보이지 않게 됩니다.
- 사용자가 애플리케이션을 시작하고 종료합니다.
- 의사 개체가 만들어지고 제거됩니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000 Professional[데스크톱 앱만] |
지원되는 최소 서버 | Windows 2000 Server[데스크톱 앱만] |
대상 플랫폼 | Windows |
헤더 | combaseapi.h(Objbase.h 포함) |
라이브러리 | Ole32.lib |
DLL | Ole32.dll |