다음을 통해 공유


구성 요소 범주 관리자 구현

사용 가능한 구성 요소 수가 증가함에 따라 이러한 구성 요소를 관리하기가 점점 더 어려워집니다. 노출하는 인터페이스와 수행하는 작업 측면에서 많은 구성 요소가 비슷한 기능을 제공합니다.

특정 컨텍스트에서 사용할 수 있는 구성 요소를 열거해야 하는 경우가 많습니다. 예를 들어 OLE 복합 문서에 사용되는 개체 삽입 대화 상자와 OLE 컨트롤에 사용되는 삽입 컨트롤 대화 상자가 있습니다. 이러한 대화 상자에는 복합 문서 또는 컨트롤에 대한 인터페이스 계약을 이행(또는 이행을 주장)하는 모든 구성 요소가 나열됩니다. 이러한 기존 범주(OLE 문서, OLE 컨트롤)는 정확한 인터페이스 서명을 의미하지 않습니다. OLE 문서는 특정 코어 인터페이스 집합(예: IOleObject 또는 IPersistStorage)을 노출해야 하지만 IOleLink와 같은 추가 인터페이스를 노출할 수도 있습니다.

이전에는 구성 요소에 해당하는 HKEY_CLASSES_ROOT\CLSID\{...}레지스트리 키 에 사람이 읽을 수 있는 이름("삽입 가능", "컨트롤" 등)을 하위 키로 추가하여 구성 요소에 태그를 지정했습니다. 이는 범주의 중앙 정의에 적합하지만 많은 독립 당사자가 새 범주를 정의할 때 이름 충돌이 발생할 위험이 있습니다. COM의 다른 영역과 마찬가지로 확장 가능한 네임스페이스를 제공하는 솔루션은 GUID(Globally Unique Identifiers)를 사용하는 것입니다. 사람이 읽을 수 있는 이름을 사용하는 대신 각 범주에 고유한 숫자(CATID)가 할당됩니다.

기존 분류의 또 다른 제한 사항은 구성 요소 자체의 기능을 표현하는 것으로 제한된다는 것입니다. 많은 구성 요소에는 컨테이너의 특정 기능이 필요합니다. 이러한 구성 요소를 컨테이너에 삽입하면 구성 요소가 해당 범주 중 하나에 내포된 계약을 충족하더라도 삽입이 예기치 않게 실패하거나 동작할 수 있습니다. 특정 상황에서 성공적으로 사용할 수 있는 구성 요소를 열거하려면 구성 요소와 컨테이너의 기능을 모두 고려해야 합니다.

이러한 고려 사항으로 인해 기존 분류가 다음과 같이 변경되었습니다.

  • 범주는 전역적으로 고유한 식별자인 CATID를 사용하여 표시됩니다.
  • HKEY_CLASSES_ROOT\CLSID 레지스트리 키의 구성 요소 하위 키 아래에 두 개의 별도 하위 키인 "구현된 범주" 및 "필수 범주"가 개발되었습니다. 이러한 하위 키에는 구성 요소에서 제공하거나 구성 요소의 컨테이너에서 제공해야 하는 CATID 목록이 포함되어 있습니다.

구성 요소 범주를 쉽게 관리하기 위해 범주는 레지스트리의 중앙 위치인 HKEY_CLASSES_ROOT\Component Categories에 나열됩니다. 이 키는 설치된 범주를 CATID와 사람이 읽을 수 있는 지역화된 이름으로 나열합니다.

자세한 내용은 아래 항목을 참조하세요.