IMoniker::ComposeWith
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:
- Crie um moniker item identifica um objeto.
- Obter um moniker que identifica contêiner do objeto.
- 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 |