복합 모니커
모니커의 가장 유용한 기능 중 하나는 모니커를 함께 연결하거나 작성할 수 있다는 것입니다. 복합 모니커는 다른 모니커의 컴퍼지션이며 부품 간의 관계를 확인할 수 있는 모니커입니다. 이렇게 하면 부분 경로에 해당하는 두 개 이상의 모니커가 지정된 개체의 전체 경로를 어셈블할 수 있습니다. 동일한 클래스(예: 두 개의 파일 모니커) 또는 다른 클래스(예: 파일 모니커 및 항목 모니커)의 모니커를 작성할 수 있습니다. 고유한 모니커 클래스를 작성하는 경우 파일 또는 항목 모니커로 모니커를 작성할 수도 있습니다. 복합의 기본 이점은 간단한 모니커의 조합인 가능한 모든 모니커를 구현하는 코드 한 조각을 제공한다는 것입니다. 따라서 특정 사용자 지정 모니커 클래스의 필요성이 크게 줄어듭니다.
서로 다른 클래스의 모니커를 서로 구성할 수 있으므로 모니커에서는 여러 네임스페이스를 조인하는 기능을 제공합니다. 파일 시스템은 모든 애플리케이션이 파일 시스템 경로 이름을 이해하기 때문에 파일로 저장된 개체에 대한 공통 네임스페이스를 정의합니다. 마찬가지로 컨테이너 개체는 컨테이너가 다른 컨테이너에서 생성된 이름을 이해하지 않으므로 포함된 개체에 대한 프라이빗 네임스페이스도 정의합니다. 모니커를 사용하면 파일 모니커와 항목 모니커를 구성할 수 있으므로 이러한 네임스페이스를 조인할 수 있습니다. 모니커 클라이언트는 단일 메커니즘을 사용하여 모든 개체에 대한 네임스페이스를 검색할 수 있습니다. 클라이언트는 단순히 모 니커에서 IMoniker::BindToObject 를 호출하고, 모니커 코드는 나머지를 처리합니다. 복합에서 IMoniker::GetDisplayName 을 호출하면 모든 개별 모니커 표시 이름의 연결을 사용하여 이름이 만들어집니다.
또한 고유한 모니커 클래스를 작성할 수 있으므로 모니커 컴퍼지션을 사용하면 개체의 네임스페이스에 사용자 지정된 확장을 추가할 수 있습니다.
경우에 따라 특정 클래스의 두 모니커를 특별한 방식으로 결합할 수 있습니다. 예를 들어 불완전한 경로를 나타내는 파일 모니커와 상대 경로를 나타내는 다른 파일 모니커를 결합하여 전체 경로를 나타내는 단일 파일 모니커를 형성할 수 있습니다. 예를 들어 파일 모니커 "c:\work\art"는 상대 파일 모니커 ".로 구성될 수 있습니다. "c:\work\backup\myfile.doc"와 같은 "\backup\myfile.doc"입니다. 이것은 비일반적 컴퍼지션의 예입니다.
반면에 제네릭 컴퍼지션은 클래스에 관계없이 두 모니커의 연결을 허용합니다. 예를 들어 파일 모니커에 항목 모니커를 작성할 수 있습니다. 물론 다른 방법은 아닙니다.
비일반 컴퍼지션은 관련된 모니커의 클래스에 따라 달라지므로 해당 세부 정보는 특정 모니커 클래스의 구현에 의해 정의됩니다. 새 모니커 클래스를 작성하는 경우 새로운 유형의 비일반 컴퍼지션을 정의할 수 있습니다. 반면, 제네릭 컴퍼지션은 OLE에 의해 정의됩니다. 제네릭 컴퍼지션의 결과로 생성된 모니커를 제네릭 복합 모니커라고 합니다.
이러한 세 가지 클래스, 파일 모니커, 항목 모니커 및 제네릭 복합 모니커가 모두 함께 작동하며 가장 일반적으로 사용되는 모니커 클래스입니다.
모니커 클라이언트는 IMoniker::ComposeWith 를 호출하여 다른 모니커에 복합을 만들어야 합니다. 호출되는 모니커는 내부적으로 제네릭 컴퍼지션을 수행할 수 있는지 또는 비제네릭 컴퍼지션을 수행할 수 있는지 여부를 결정합니다. 모니커 구현에서 제네릭 컴퍼지션을 사용할 수 있다고 판단되면 OLE는 이를 용이하게 하기 위해 CreateGenericComposite 함수를 제공합니다.
관련 항목