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를 지정 합니다.

fLockTRUE이면 이 매개 변수는 무시됩니다.

반환 값

이 함수는 표준 반환 값 E_INVALIDARG, E_OUTOFMEMORY, E_UNEXPECTED 및 S_OK 반환할 수 있습니다.

설명

CoLockObjectExternal 함수는 개체가 실제로 상주하는 프로세스(처리기가 로드될 수 있는 프로세스가 아닌 EXE 프로세스)에서 호출되어야 합니다.

CoLockObjectExternal 함수는 개체의 참조 수가 0으로 이동하지 않도록 하여 잠금이 해제될 때까지 존재하도록 "잠글" 수 있습니다. 매개 변수가 다른 동일한 함수가 잠금을 해제합니다. 잠금은 개체에서 시스템 호출 IUnknown::AddRef 를 사용하여 구현됩니다. 그런 다음 FLockFALSE로 설정된 CoLockObjectExternal을 나중에 호출할 때까지 시스템에서 개체에서 IUnknown::Release를 호출하기 위해 대기합니다. 이 함수는 사용자와 마찬가지로 개체 외부에서 작동하기 때문에 최종 사용자를 대신하여 개체에 대한 참조 횟수를 유지하는 데 사용할 수 있습니다.

최종 사용자는 외부 잠금이 있더라도 애플리케이션의 수명을 명시적으로 제어할 수 있습니다. 즉, 사용자가 애플리케이션을 닫기로 결정한 경우 종료해야 합니다. 외부 잠금(예: CoLockObjectExternal에서 설정한 잠금)이 있는 경우 애플리케이션은 CoDisconnectObject 함수를 호출하여 종료하기 전에 이러한 연결을 강제로 닫을 수 있습니다.

CoLockObjectExternal을 호출하는 경우 개체에 대한 강력한 잠금이 설정됩니다. 강력한 잠금은 개체를 메모리에 유지하지만 약한 잠금은 유지하지 않습니다. 예를 들어 OLE 포함을 자동으로 업데이트하는 동안 강력한 잠금이 필요합니다. 포함된 개체의 컨테이너는 업데이트 프로세스가 완료될 때까지 메모리에 남아 있어야 합니다. 또한 애플리케이션이 클라이언트에 서비스 제공을 완료할 때까지 애플리케이션이 활성 상태로 유지되도록 하려면 애플리케이션 개체에 대한 강력한 잠금이 있어야 합니다. 모든 외부 참조는 개체에 강력한 참조 잠금을 배치합니다.

CoLockObjectExternal 함수는 일반적으로 다음과 같은 상황에서 호출됩니다.

  • 개체 서버는 표시될 때 fLock 및 fLastLockReleases모두 TRUE로 설정된 CoLockObjectExternal을 호출해야 합니다. 이 호출은 사용자를 대신하여 강력한 잠금을 만듭니다. 애플리케이션이 닫히면 CoLockObjectExternal을 호출하여 잠금을 해제하고 fLockFALSE 로 설정하고 fLastLockReleasesTRUE로 설정합니다.
  • 서버에서 CoLockObjectExternal 에 대한 호출은 IOleContainer::LockContainer 구현에도 사용할 수 있습니다.
LockContainer 구현에서 CoLockObjectExternal을 사용할 때 알아야 할 몇 가지 사항이 있습니다. 포함된 개체는 컨테이너에서 LockContainer 를 호출하여 실행 상태를 유지하는 다른 이유가 없는 상태에서 계속 실행(잠글 수 있도록)합니다. 포함된 개체가 표시되면 컨테이너는 OleSetContainedObject 함수를 호출하여 포함된 개체에 대한 연결을 약화시켜야 다른 연결이 개체에 영향을 줄 수 있습니다.

애플리케이션이 CoLockObjectExternal 호출을 통해 애플리케이션의 모든 측면을 관리하고 문서 종료를 완전히 관리하지 않는 한, 컨테이너는 잠금 수가 0에 도달하고 컨테이너가 보이지 않는 경우 종료되도록 LockContainer 에 프라이빗 잠금 수를 유지해야 합니다. 종료의 모든 측면을 유지 관리하고 프라이빗 잠금 수를 유지하지 않도록 하려면 다음 조건 중 하나가 발생할 때마다 CoLockObjectExternal 을 호출해야 합니다.

  • 문서가 만들어지고 제거되거나 표시되거나 보이지 않게 됩니다.
  • 사용자가 애플리케이션을 시작하고 종료합니다.
  • 의사 개체가 만들어지고 제거됩니다.
디버깅을 위해 애플리케이션에 설정된 외부 잠금(및 잠금 해제)의 수를 유지하는 것이 유용할 수 있습니다.

요구 사항

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

추가 정보

IOleContainer::LockContainer

OleSetContainedObject