다음을 통해 공유


IMoniker::ComposeWith 메서드(objidl.h)

현재 모니커와 지정된 모니커를 결합하여 새 복합 모니커를 만듭니다.

구문

HRESULT ComposeWith(
  [in]  IMoniker *pmkRight,
  [in]  BOOL     fOnlyIfNotGeneric,
  [out] IMoniker **ppmkComposite
);

매개 변수

[in] pmkRight

이 모니커의 끝에 작성할 모니커의 IMoniker 인터페이스에 대한 포인터입니다.

[in] fOnlyIfNotGeneric

TRUE이면 호출자에게 비제네릭 컴퍼지션이 필요하므로 pmkRight가 이 모니커가 제네릭 복합을 형성하는 것 이외의 방법으로 작성할 수 있는 모니커 클래스인 경우에만 작업을 진행해야 합니다. FALSE인 경우 메서드는 필요한 경우 제네릭 복합을 만들 수 있습니다. 대부분의 호출자는 이 매개 변수를 FALSE로 설정해야 합니다.

[out] ppmkComposite

복합 모니커 포인터를 수신하는 IMoniker 포인터 변수에 대한 포인터입니다. 성공하면 구현에서 결과 모니커에서 AddRef 를 호출해야 합니다. 릴리스를 호출하는 것은 호출자의 책임입니다. 오류가 발생하거나 모니커가 아무것도 작성하지 않는 경우(예: 항목 모니커 또는 파일 모니커를 사용하여 모니커 방지 구성) *ppmkCompositeNULL로 설정해야 합니다.

반환 값

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

반환 코드 Description
S_OK
모니커가 성공적으로 결합되었습니다.
MK_E_NEEDGENERIC
fOnlyIfNotGenericTRUE이지만 제네릭 복합 모니커를 만들지 않고는 모니커를 함께 작성할 수 없음을 나타냅니다.

설명

두 모니커를 함께 조인하는 것을 컴퍼지션이라고 합니다. 경우에 따라 동일한 클래스의 두 모니커를 비일생적 컴퍼지션이라고 하는 모니커에 결합할 수 있습니다. 예를 들어 불완전한 경로를 나타내는 파일 모니커와 상대 경로를 나타내는 다른 파일 모니커를 결합하여 전체 경로를 나타내는 단일 파일 모니커를 형성할 수 있습니다. 지정된 모니커 클래스에 대한 비일반 컴퍼지션은 해당 모니커 클래스에 대한 ComposeWith 구현에서만 처리할 수 있습니다.

모든 클래스의 두 모니커를 결합하는 것을 제네릭 컴퍼지션이라고 하며 CreateGenericComposite 함수를 호출하여 수행할 수 있습니다.

모니커의 컴퍼지션은 결합 연산입니다. 즉, A, B 및 C가 모니커인 경우 여기서 Comp()는 컴퍼지션 연산인 Comp( Comp( A, B ), C )를 나타냅니다.

는 항상 Comp( A, Comp( B, C ) )와 같습니다.

발신자에게 참고 사항

두 모니커를 결합하려면 CreateGenericComposite 함수를 호출하는 대신 ComposeWith를 호출하여 첫 번째 모니커에게 비제네릭 컴퍼지션을 수행할 기회를 제공해야 합니다.

개체를 식별하는 항목 모니커를 제공하는 개체는 ComposeWith 를 호출하여 개체의 위치를 완전히 식별하는 모니커를 제공합니다. 예를 들어 문서 부분에 대한 연결을 지원하는 서버 또는 문서 내의 포함된 개체에 대한 연결을 지원하는 컨테이너에 적용됩니다. 이러한 상황에서는 다음을 수행합니다.

  1. 개체를 식별하는 항목 모니커를 만듭니다.
  2. 개체의 컨테이너를 식별하는 모니커를 가져옵니다.
  3. 컨테이너를 식별하는 모니커에서 ComposeWith 를 호출하고 항목 모니커를 pmkRight 매개 변수로 전달합니다.

구현자에 대한 참고 사항

제네릭이 아닌 컴퍼지션 또는 제네릭 컴퍼지션을 사용하여 pmkRight가 가리키는 모니커로 현재 모니커를 작성할 수 있습니다. pmkRight로 표시된 모니커의 클래스가 현재 모니커의 클래스와 같으면 pmkRight의 내용을 사용하여 보다 지능적인 비일생성 컴퍼지션을 수행할 수 있습니다.

새 모니커 클래스를 작성할 때 특별한 대우를 받을 클래스 또는 다른 클래스 중 어떤 종류의 모니커가 있는지 결정해야 합니다. 그렇다면 ComposeWith를 구현하여 pmkRight가 이 처리가 있어야 하는 유형의 모니커인지 여부를 검사. 이렇게 하려면 모니커의 IPersist::GetClassID 메서드를 호출하거나 사용자 지정 인터페이스를 지원하는 모니커 개체를 정의한 경우 해당 인터페이스의 모니커에서 QueryInterface 를 호출할 수 있습니다. 특수 처리의 예로 상대 파일 모니커가 있는 절대 파일 모니커의 비일생적 컴퍼지션이 있습니다. 특수 모니커의 가장 일반적인 경우는 모니커 클래스의 역( IMoniker::Inverse 구현에서 반환되는 모든 항목)입니다.

pmkRight가 결과 복합이 비어 있도록 수신기를 완전히 부정하는 경우 ppmkComposite에서 NULL을 다시 전달하고 S_OK 상태 코드를 반환해야 합니다.

pmkRight 매개 변수가 특별한 처리를 제공하는 클래스가 아닌 경우 fOnlyIfNotGeneric을 검사하여 다음에 수행할 작업을 확인합니다. fOnlyIfNotGenericTRUE이면 ppmkComposite를 통해 NULL을 다시 전달하고 MK_E_NEEDGENERIC 상태 코드를 반환합니다. fOnlyIfNotGenericFALSE이면 CreateGenericComposite 함수를 호출하여 컴퍼지션을 일반적으로 수행합니다.

구현별 참고 사항

구현 참고
안티 모니커 fOnlyIfNotGenericTRUE이면 이 메서드는 ppmkCompositeNULL 모니커로 설정하고 MK_E_NEEDGENERIC 반환합니다. 그렇지 않으면 메서드는 두 모니커를 제네릭 복합으로 결합한 결과를 반환합니다. 모니커 방지의 오른쪽에 있는 파일, 항목 또는 포인터 모니커를 작성하면 컴퍼지션 순서가 반전된 경우와 마찬가지로 아무것도 구성하지 않고 제네릭 복합이 생성됩니다.
클래스 모니커 계약을 따르고 E_INVALIDARG 및 MK_E_NEEDGENERIC 반환할 수 있다는 측면에서 항목 모니커처럼 동작합니다.
파일 모니커 pmkRight가 안티 모니커인 경우 반환된 모니커는 NULL입니다. pmkRight가 맨 왼쪽 구성 요소가 안티 모니커인 복합인 경우 반환된 모니커는 가장 왼쪽의 안티 모니커가 제거된 복합 모니커입니다. pmkRight가 파일 모니커인 경우 이 메서드는 가능한 경우 두 모니커를 단일 파일 모니커로 축소합니다. 가능하지 않은 경우(예: 두 파일 모니커가 d:\work 및 e:\reports와 같이 절대 경로를 나타내는 경우) 반환된 모니커는 NULL 이고 반환 값은 MK_E_SYNTAX. pmkRight가 안티 모니커나 파일 모니커가 아닌 경우 메서드는 fOnlyIfNotGeneric 매개 변수를 확인합니다. FALSE이면 메서드는 두 모니커를 제네릭 복합으로 결합합니다. TRUE이면 메서드는 *ppmkCompositeNULL로 설정하고 MK_E_NEEDGENERIC 반환합니다.
제네릭 복합 모니커 fOnlyIfNotGenericTRUE이면 이 메서드는 *pmkCompositeNULL로 설정하고 MK_E_NEEDGENERIC 반환합니다. 그렇지 않으면 메서드는 CreateGenericComposite 함수를 호출하여 두 모니커를 결합한 결과를 반환합니다.
항목 모니커 pmkRight가 안티 모니커인 경우 반환된 모니커는 NULL입니다. pmkRight가 맨 왼쪽 구성 요소가 안티 모니커인 복합인 경우 반환된 모니커는 가장 왼쪽의 안티 모니커가 제거된 후 복합입니다. pmkRight가 안티 모니커가 아닌 경우 메서드는 fOnlyIfNotGenericFALSE인 경우 두 모니커를 제네릭 복합으로 결합합니다. fOnlyIfNotGenericTRUE이면 메서드는 NULL 모니커와 반환 값 MK_E_NEEDGENERIC 반환합니다.
OBJREF 모니커 pmkRight가 안티 모니커인 경우 반환된 모니커는 NULL입니다. pmkRight가 맨 왼쪽 구성 요소가 안티 모니커인 복합인 경우 반환된 모니커는 가장 왼쪽의 안티 모니커가 제거된 복합 모니커입니다. pmkRight가 모니커 방지 또는 맨 왼쪽 구성 요소가 안티 모니커인 복합 모니커가 아닌 경우 메서드는 fOnlyIfNotGeneric 매개 변수를 확인합니다. FALSE이면 메서드는 두 모니커를 제네릭 복합으로 결합합니다. TRUE이면 메서드는 *ppmkCompositeNULL로 설정하고 MK_E_NEEDGENERIC 반환합니다.
포인터 모니커 pmkRight가 안티 모니커인 경우 반환된 모니커는 NULL입니다. pmkRight가 맨 왼쪽 구성 요소가 안티 모니커인 복합인 경우 반환된 모니커는 가장 왼쪽의 안티 모니커가 제거된 후 복합입니다. fOnlyIfNotGenericFALSE이면 반환된 모니커는 두 모니커의 제네릭 복합입니다. 그렇지 않으면 메서드는 *ppmkCompositeNULL로 설정하고 MK_E_NEEDGENERIC 반환합니다.
URL 모니커 URL 모니커에서는 상대 URL로 구성된 기본 URL인 두 URL의 컴퍼지션을 지원합니다. 이 컴퍼지션은 상대 URL의 RFC에 따라 수행됩니다. fOnlyIfNotGenericTRUE이면 메서드는 MK_E_NEEDGENERIC 반환합니다. 그렇지 않으면 이 메서드는 CreateGenericComposite(이, pmkRight, ppmkComposite)를 반환합니다.

요구 사항

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

추가 정보

CreateGenericComposite

Imoniker