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 를 호출해야 합니다. 릴리스를 호출하는 것은 호출자의 책임입니다. 오류가 발생하거나 모니커가 아무것도 작성하지 않는 경우(예: 항목 모니커 또는 파일 모니커를 사용하여 모니커 방지 구성) *ppmkComposite 를 NULL로 설정해야 합니다.
반환 값
이 메서드는 다음 값뿐만 아니라 E_OUTOFMEMORY 및 E_UNEXPECTED 표준 반환 값을 반환할 수 있습니다.
반환 코드 | Description |
---|---|
|
모니커가 성공적으로 결합되었습니다. |
|
fOnlyIfNotGeneric이 TRUE이지만 제네릭 복합 모니커를 만들지 않고는 모니커를 함께 작성할 수 없음을 나타냅니다. |
설명
두 모니커를 함께 조인하는 것을 컴퍼지션이라고 합니다. 경우에 따라 동일한 클래스의 두 모니커를 비일생적 컴퍼지션이라고 하는 모니커에 결합할 수 있습니다. 예를 들어 불완전한 경로를 나타내는 파일 모니커와 상대 경로를 나타내는 다른 파일 모니커를 결합하여 전체 경로를 나타내는 단일 파일 모니커를 형성할 수 있습니다. 지정된 모니커 클래스에 대한 비일반 컴퍼지션은 해당 모니커 클래스에 대한 ComposeWith 구현에서만 처리할 수 있습니다.
모든 클래스의 두 모니커를 결합하는 것을 제네릭 컴퍼지션이라고 하며 CreateGenericComposite 함수를 호출하여 수행할 수 있습니다.
모니커의 컴퍼지션은 결합 연산입니다. 즉, A, B 및 C가 모니커인 경우 여기서 Comp()는 컴퍼지션 연산인 Comp( Comp( A, B ), C )를 나타냅니다.
는 항상 Comp( A, Comp( B, C ) )와 같습니다.
발신자에게 참고 사항
두 모니커를 결합하려면 CreateGenericComposite 함수를 호출하는 대신 ComposeWith를 호출하여 첫 번째 모니커에게 비제네릭 컴퍼지션을 수행할 기회를 제공해야 합니다.개체를 식별하는 항목 모니커를 제공하는 개체는 ComposeWith 를 호출하여 개체의 위치를 완전히 식별하는 모니커를 제공합니다. 예를 들어 문서 부분에 대한 연결을 지원하는 서버 또는 문서 내의 포함된 개체에 대한 연결을 지원하는 컨테이너에 적용됩니다. 이러한 상황에서는 다음을 수행합니다.
- 개체를 식별하는 항목 모니커를 만듭니다.
- 개체의 컨테이너를 식별하는 모니커를 가져옵니다.
- 컨테이너를 식별하는 모니커에서 ComposeWith 를 호출하고 항목 모니커를 pmkRight 매개 변수로 전달합니다.
구현자에 대한 참고 사항
제네릭이 아닌 컴퍼지션 또는 제네릭 컴퍼지션을 사용하여 pmkRight가 가리키는 모니커로 현재 모니커를 작성할 수 있습니다. pmkRight로 표시된 모니커의 클래스가 현재 모니커의 클래스와 같으면 pmkRight의 내용을 사용하여 보다 지능적인 비일생성 컴퍼지션을 수행할 수 있습니다.새 모니커 클래스를 작성할 때 특별한 대우를 받을 클래스 또는 다른 클래스 중 어떤 종류의 모니커가 있는지 결정해야 합니다. 그렇다면 ComposeWith를 구현하여 pmkRight가 이 처리가 있어야 하는 유형의 모니커인지 여부를 검사. 이렇게 하려면 모니커의 IPersist::GetClassID 메서드를 호출하거나 사용자 지정 인터페이스를 지원하는 모니커 개체를 정의한 경우 해당 인터페이스의 모니커에서 QueryInterface 를 호출할 수 있습니다. 특수 처리의 예로 상대 파일 모니커가 있는 절대 파일 모니커의 비일생적 컴퍼지션이 있습니다. 특수 모니커의 가장 일반적인 경우는 모니커 클래스의 역( IMoniker::Inverse 구현에서 반환되는 모든 항목)입니다.
pmkRight가 결과 복합이 비어 있도록 수신기를 완전히 부정하는 경우 ppmkComposite에서 NULL을 다시 전달하고 S_OK 상태 코드를 반환해야 합니다.
pmkRight 매개 변수가 특별한 처리를 제공하는 클래스가 아닌 경우 fOnlyIfNotGeneric을 검사하여 다음에 수행할 작업을 확인합니다. fOnlyIfNotGeneric이 TRUE이면 ppmkComposite를 통해 NULL을 다시 전달하고 MK_E_NEEDGENERIC 상태 코드를 반환합니다. fOnlyIfNotGeneric이 FALSE이면 CreateGenericComposite 함수를 호출하여 컴퍼지션을 일반적으로 수행합니다.
구현별 참고 사항
구현 | 참고 |
---|---|
안티 모니커 | fOnlyIfNotGeneric이 TRUE이면 이 메서드는 ppmkComposite를 NULL 모니커로 설정하고 MK_E_NEEDGENERIC 반환합니다. 그렇지 않으면 메서드는 두 모니커를 제네릭 복합으로 결합한 결과를 반환합니다. 모니커 방지의 오른쪽에 있는 파일, 항목 또는 포인터 모니커를 작성하면 컴퍼지션 순서가 반전된 경우와 마찬가지로 아무것도 구성하지 않고 제네릭 복합이 생성됩니다. |
클래스 모니커 | 계약을 따르고 E_INVALIDARG 및 MK_E_NEEDGENERIC 반환할 수 있다는 측면에서 항목 모니커처럼 동작합니다. |
파일 모니커 | pmkRight가 안티 모니커인 경우 반환된 모니커는 NULL입니다. pmkRight가 맨 왼쪽 구성 요소가 안티 모니커인 복합인 경우 반환된 모니커는 가장 왼쪽의 안티 모니커가 제거된 복합 모니커입니다. pmkRight가 파일 모니커인 경우 이 메서드는 가능한 경우 두 모니커를 단일 파일 모니커로 축소합니다. 가능하지 않은 경우(예: 두 파일 모니커가 d:\work 및 e:\reports와 같이 절대 경로를 나타내는 경우) 반환된 모니커는 NULL 이고 반환 값은 MK_E_SYNTAX. pmkRight가 안티 모니커나 파일 모니커가 아닌 경우 메서드는 fOnlyIfNotGeneric 매개 변수를 확인합니다. FALSE이면 메서드는 두 모니커를 제네릭 복합으로 결합합니다. TRUE이면 메서드는 *ppmkComposite를 NULL로 설정하고 MK_E_NEEDGENERIC 반환합니다. |
제네릭 복합 모니커 | fOnlyIfNotGeneric이 TRUE이면 이 메서드는 *pmkComposite를 NULL로 설정하고 MK_E_NEEDGENERIC 반환합니다. 그렇지 않으면 메서드는 CreateGenericComposite 함수를 호출하여 두 모니커를 결합한 결과를 반환합니다. |
항목 모니커 | pmkRight가 안티 모니커인 경우 반환된 모니커는 NULL입니다. pmkRight가 맨 왼쪽 구성 요소가 안티 모니커인 복합인 경우 반환된 모니커는 가장 왼쪽의 안티 모니커가 제거된 후 복합입니다. pmkRight가 안티 모니커가 아닌 경우 메서드는 fOnlyIfNotGeneric이 FALSE인 경우 두 모니커를 제네릭 복합으로 결합합니다. fOnlyIfNotGeneric이 TRUE이면 메서드는 NULL 모니커와 반환 값 MK_E_NEEDGENERIC 반환합니다. |
OBJREF 모니커 | pmkRight가 안티 모니커인 경우 반환된 모니커는 NULL입니다. pmkRight가 맨 왼쪽 구성 요소가 안티 모니커인 복합인 경우 반환된 모니커는 가장 왼쪽의 안티 모니커가 제거된 복합 모니커입니다. pmkRight가 모니커 방지 또는 맨 왼쪽 구성 요소가 안티 모니커인 복합 모니커가 아닌 경우 메서드는 fOnlyIfNotGeneric 매개 변수를 확인합니다. FALSE이면 메서드는 두 모니커를 제네릭 복합으로 결합합니다. TRUE이면 메서드는 *ppmkComposite를 NULL로 설정하고 MK_E_NEEDGENERIC 반환합니다. |
포인터 모니커 | pmkRight가 안티 모니커인 경우 반환된 모니커는 NULL입니다. pmkRight가 맨 왼쪽 구성 요소가 안티 모니커인 복합인 경우 반환된 모니커는 가장 왼쪽의 안티 모니커가 제거된 후 복합입니다. fOnlyIfNotGeneric이 FALSE이면 반환된 모니커는 두 모니커의 제네릭 복합입니다. 그렇지 않으면 메서드는 *ppmkComposite를 NULL로 설정하고 MK_E_NEEDGENERIC 반환합니다. |
URL 모니커 | URL 모니커에서는 상대 URL로 구성된 기본 URL인 두 URL의 컴퍼지션을 지원합니다. 이 컴퍼지션은 상대 URL의 RFC에 따라 수행됩니다. fOnlyIfNotGeneric이 TRUE이면 메서드는 MK_E_NEEDGENERIC 반환합니다. 그렇지 않으면 이 메서드는 CreateGenericComposite(이, pmkRight, ppmkComposite)를 반환합니다. |
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000 Professional[데스크톱 앱만] |
지원되는 최소 서버 | Windows 2000 Server[데스크톱 앱만] |
대상 플랫폼 | Windows |
헤더 | objidl.h |