Share via


IRunningObjectTable::Register 메서드(objidl.h)

ROT(실행 중인 개체 테이블)에 개체 및 식별 모니커를 등록합니다.

구문

HRESULT Register(
  [in]  DWORD    grfFlags,
  [in]  IUnknown *punkObject,
  [in]  IMoniker *pmkObjectName,
  [out] DWORD    *pdwRegister
);

매개 변수

[in] grfFlags

rot의 punkObject 참조가 약하거나 강한지 여부를 지정하고 ROT의 항목을 통해 개체에 대한 액세스를 제어합니다. 자세한 내용은 설명 부분을 참조하십시오.

의미
ROTFLAGS_REGISTRATIONKEEPSALIVE
가 설정되면 개체에 대한 강력한 등록을 나타냅니다.
ROTFLAGS_ALLOWANYCLIENT
설정되면 모든 클라이언트는 ROT의 항목을 통해 실행 중인 개체에 연결할 수 있습니다. 설정하지 않으면 개체를 등록한 창 스테이션의 클라이언트만 연결할 수 있습니다.

[in] punkObject

실행 중으로 등록되는 개체에 대한 포인터입니다.

[in] pmkObjectName

punkObject를 식별하는 모니커에 대한 포인터입니다.

[out] pdwRegister

IRunningObjectTable::Revoke 또는 IRunningObjectTable::NoteChangeTime에 대한 후속 호출에 사용할 수 있는 이 ROT 항목의 식별자입니다. 호출자는 이 매개 변수에 대해 NULL 을 지정할 수 없습니다. 오류가 발생하면 *pdwRegister 가 0으로 설정됩니다.

반환 값

이 메서드는 다음 값뿐만 아니라 E_INVALIDARG 및 E_OUTOFMEMORY 표준 반환 값을 반환할 수 있습니다.

반환 코드 Description
S_OK
메서드가 완료되었습니다.
MK_S_MONIKERALREADYREGISTERED
모니커/개체 쌍이 성공적으로 등록되었지만 다른 개체(동일한 개체일 수 있음)가 이미 동일한 모니커에 등록되었습니다.

설명

이 메서드는 개체를 식별하는 모니커 아래의 개체에 대한 포인터를 등록합니다. 모니커는 IRunningObjectTable::GetObject를 사용하여 테이블을 검색할 때 키로 사용됩니다.

개체가 등록되면 ROT는 항상 개체에서 AddRef 를 호출합니다. 약한 등록(ROTFLAGS_REGISTRATIONKEEPSALIVE 설정되지 않음)의 경우 ROT는 개체에 대한 마지막 강력한 참조가 해제될 때마다 개체를 해제합니다. 강력한 등록(ROTFLAGS_REGISTRATIONKEEPSALIVE 집합)의 경우 ROT는 개체의 등록이 명시적으로 해지될 때까지 개체가 제거되지 않도록 방지합니다.

LocalService 또는 RunA로 등록된 서버는 호출에서 ROTFLAGS_ALLOWANYCLIENT 플래그를 Register 로 설정하여 모든 클라이언트가 연결할 수 있도록 할 수 있습니다. 이 비트를 설정하는 서버는 실행 파일의 AppID를 참조하는 레지스트리의 AppID 섹션에 해당 실행 파일 이름이 있어야 합니다. "activator로 활성화" 서버(LocalService 또는 RunA로 등록되지 않음)는 Register 호출에서 이 플래그를 설정해서는 안 됩니다. 서비스 설치에 대한 자세한 내용은 서비스 애플리케이션으로 설치를 참조하세요.

동일한 모니커를 사용하여 두 번째 개체를 등록하거나 동일한 모니커를 사용하여 동일한 개체를 다시 등록하면 ROT에 두 번째 항목이 만들어집니다. 이 경우 Register 는 MK_S_MONIKERALREADYREGISTERED 반환합니다. 중복 항목에도 pdwRegister 식별자가 다르기 때문에 Register에 대한 각 호출은 IRunningObjectTable::Revoke 호출과 일치해야 합니다. 중복 등록의 문제는 IRunningObjectTable::IsRunning에 대한 후속 호출에서 모니커가 지정된 경우 반환될 개체를 확인할 방법이 없다는 것입니다.

발신자에 대한 참고 사항

모니커 공급자인 경우(즉, 다른 사용자가 액세스할 수 있도록 개체를 식별하는 모니커를 나눠주면) Register 메서드를 호출하여 개체가 실행되기 시작할 때 등록해야 합니다. 로드하는 동안 개체의 이름을 바꾸는 경우에도 이 메서드를 호출해야 합니다.

가장 일반적인 모니커 공급자 유형은 복합 문서 링크 원본입니다. 여기에는 문서(또는 문서의 일부)에 대한 연결을 지원하는 서버 애플리케이션과 문서 내의 포함에 대한 연결을 지원하는 컨테이너 애플리케이션이 포함됩니다. 연결을 지원하지 않는 서버 애플리케이션은 ROT를 사용하여 포함에 대한 연결을 지원하는 컨테이너 애플리케이션과 협력할 수도 있습니다.

서버 애플리케이션을 작성하는 경우 일반적으로 IOleObject::D oVerb 구현에서 실행을 시작할 때 ROT에 개체를 등록해야 합니다. IOleClientSite::GetMoniker를 사용하여 컨테이너 문서의 모니커를 가져와야 하는 전체 모니커 아래에 개체를 등록해야 합니다. 또한 컨테이너 문서의 이름이 바뀌면 호출되는 IOleObject::SetMoniker 구현에서 개체를 해지하고 다시 등록해야 합니다.

포함에 대한 연결을 지원하는 컨테이너 애플리케이션을 작성하는 경우 문서를 로드할 때 ROT에 등록해야 합니다. 문서의 이름이 바뀐 경우 ROT를 취소하고 다시 등록하고 문서에 포함된 개체에 대해 IOleObject::SetMoniker 를 호출하여 문서를 다시 등록할 수 있도록 해야 합니다.

개체가 더 이상 실행되지 않거나 모니커가 변경될 때 ROT에 등록된 개체를 명시적으로 해지해야 합니다. 이 해지는 시스템이 ROT에서 항목을 자동으로 제거할 방법이 없기 때문에 중요합니다. pdwRegister를 통해 작성된 식별자를 캐시하고 IRunningObjectTable::Revoke 호출에 사용하여 등록을 해지해야 합니다. 강력한 등록의 경우 개체 등록이 취소될 때 강력한 참조가 해제됩니다.

Windows Server 2003부터 예기치 않은 서버 문제로 인해 ROT에 남아 있는 부실 항목이 있는 경우 COM은 ROT에서 이러한 부실 항목을 자동으로 제거합니다.

시스템의 Register 구현은 pmkObjectName 매개 변수에서 IMoniker::Reduce를 호출하여 등록 전에 모니커가 완전히 감소되도록 합니다. 완전히 축소된 모니커가 개체를 둘 이상 알고 있는 경우 이러한 모든 모니커 아래에 등록해야 합니다.

요구 사항

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

추가 정보

IRunningObjectTable