Compartilhar via


IMoniker::ComposeWith

Windows Mobile SupportedWindows Embedded CE Supported

9/8/2008

Thismethod redige com outro moniker.

Syntax

HRESULT ComposeWith( 
  IMoniker* pmkRight, 
  BOOL fOnlyIfNotGeneric, 
  IMoniker** ppmkComposite
);

Parameters

  • pmkRight
    [no] Ponteiro para o IMoniker interface no moniker para compor o final deste moniker.
  • fOnlyIfNotGeneric
    [no] Boolean que está definido como TRUE se o chamador requer uma composição non-Generic.

    A operação deve proceder somente se pmkRight é uma classe moniker que este moniker pode compor com de alguma maneira Other Than formando um genérico composição.

    Se FALSE, o método pode criar um genérico composição se necessário.

  • ppmkComposite
    [out] Endereço do IMonikervariável * pointer que recebe o ponteiro interface para a composição resultante moniker ponteiro.

    Quando bem-sucedido, a implementação deve chamar o IUnknown::AddRef método no moniker resultante; é responsabilidade do chamador para chamar o IUnknown::Release método.

    Se ocorrer um erro ou a compor monikers para nada (por exemplo, compondo um anti-moniker com um moniker item ou um moniker arquivo) *ppmkComposite Deve ser definido como NULL.

Return Value

O método suporta o padrão retornam valores E_OUTOFMEMORY e E_UNEXPECTED.

A seguinte tabela mostra os adicionais retornam valores para este método.

Valor Descrição

S_OK

Os identificadores de origem foram combinados com êxito.

MK_E_NEEDGENERIC

Indica que fOnlyIfNotGeneric Foi TRUE, mas os identificadores de origem não podem ser compostos juntos sem criar um genérico composição moniker.

Remarks

Ingressando em dois monikers juntos é chamado composição. Às vezes, dois monikers da mesma classe podem ser combinados no que é chamado composição non-Generic.

De exemplo, um moniker arquivo que representa um caminho incompleto e outro arquivo moniker representando uma caminho relativo podem ser combinados para forma moniker um único arquivo que representa o completo caminho.

Composição nongeneric para uma classe moniker determinado pode ser tratada somente na implementação de IMoniker::ComposeWith Para essa classe moniker.

Composição de identificadores de origem é uma operação associativo. Isto é, se A, B e C são identificadores de origem, em seguida, onde Comp() representa a operação composição.

Comp( Comp( A, B ), C )
    is always equal to
Comp( A, Comp( B, C ) )

Para determinar se a plataforma oferece suporte a esta interface, consulte Determinando suporte COM APIs.

Notas para chamadores

Para combinar dois monikers, chamar IMoniker::ComposeWith Para dar o moniker primeiro uma chance executar uma composição non-Generic.

Um objeto que fornece monikers item para identificar seus objetos poderia chamar IMoniker::ComposeWith Para fornecer um moniker que completamente identifica a localidade do objeto.

Isso seria aplicar, de exemplo, para um servidor que ofereça suporte a vinculação a partes de um documento ou um contêiner que ofereça suporte a vinculação a incorporado objetos em seus documentos.

Em tal uma situação, siga o seguinte:

  1. Crie um moniker item identifica um objeto.
  2. Obter um moniker que identifica contêiner do objeto.
  3. Chamar IMoniker::ComposeWith Sobre o moniker identificando o contêiner, passando o moniker item como o pmkRight parâmetro.

A maioria dos chamadores do IMoniker::ComposeWith Configure o fOnlyIfNotGeneric parâmetro para FALSE.

Notas para Implementers

Você pode usar genérico ou não-genérico composição para compor o atual moniker com o moniker que pmkRight Aponta para. Se a classe do moniker indicada por pmkRight é o mesmo do atual moniker, é possível usar o conteúdo de pmkRight Para executar uma composição non-Generic mais inteligente.

Ao gravar uma nova classe moniker, você deve decidir se há quaisquer tipos de identificadores de origem, se da sua classe ou outra classe, à qual você desejar fornecer tratamento especial.

Em caso afirmativo, implementar IMoniker::ComposeWith Para verificar se pmkRight é um moniker do tipo que deve ter esta tratamento. Para fazer isso, você pode do chamar o moniker GetClassID método (derivado a partir de IPersist interface), ou, se você tiver definido um objeto moniker que ofereça suporte a um personalizado interface, você pode chamar o IUnknown::QueryInterface método no moniker para essa interface.

Um exemplo de tratamento especial seria a composição non-Generic de um moniker absoluto arquivo com um relativo moniker arquivo. Comum the most maiúsculas e minúsculas de um moniker especial é o inverso para sua classe moniker (tudo o que você retornar de sua implementação das IMoniker::Inverse método).

Se pmkRight completamente invalida o receptor de forma a composição resultante é vazio, você deve transmitir voltar NULL Em ppmkComposite e retornar a codificar status S_OK.

Se a pasta pmkRight parâmetro não é de uma classe à qual você fornecer tratamento especial, examine fOnlyIfNotGeneric Para determinar o que fazer próximo.

Se fOnlyIfNotGeneric é TRUE, transmitir voltar NULL através de ppmkComposite e retornar a codificar status MK_E_NEEDGENERIC.

Se fOnlyIfNotGeneric é FALSE, chamar o CreateGenericComposite função para executar a composição genericamente.

Requirements

Header objidl.h, objidl.idl
Library ole32.lib, uuid.lib
Windows Embedded CE Windows CE 2.0 and later
Windows Mobile Windows Mobile Version 5.0 and later

See Also

Reference

CreateGenericComposite
IMoniker
IPersist::GetClassID