Método IMoniker::RelativePathTo (objidl.h)
Cria um moniker relativo entre esse moniker e o moniker especificado.
Sintaxe
HRESULT RelativePathTo(
[in] IMoniker *pmkOther,
[out] IMoniker **ppmkRelPath
);
Parâmetros
[in] pmkOther
Um ponteiro para a interface IMoniker no moniker para o qual um caminho relativo deve ser tomado.
[out] ppmkRelPath
Um ponteiro para uma variável de ponteiro IMoniker que recebe o ponteiro de interface para o moniker relativo. Quando bem-sucedida, a implementação deve chamar AddRef no novo moniker; é responsabilidade do chamador chamar Release. Se ocorrer um erro, a implementação definirá *ppmkRelPath como NULL.
Retornar valor
Esse método pode retornar os valores de retorno padrão E_OUTOFMEMORY e E_UNEXPECTED, bem como os valores a seguir.
Código de retorno | Descrição |
---|---|
|
O método foi concluído com sucesso. |
|
Nenhum prefixo comum é compartilhado pelos dois monikers e o moniker retornado em ppmkRelPath é pmkOther. |
|
Esse moniker é um moniker relativo, como um moniker de item. Esse moniker deve ser composto com o moniker de seu contêiner antes que um caminho relativo possa ser determinado. |
Comentários
Um moniker relativo é análogo a um caminho relativo (como ".. \backup"). Por exemplo, suponha que você tenha um moniker que representa o caminho "c:\projects\secret\art\pict1.bmp" e outro moniker que representa o caminho "c:\projects\secret\docs\chap1.txt". Chamar RelativePathTo no primeiro moniker, passando o segundo como o parâmetro pmkOther , criaria um moniker relativo representando o caminho ".. \docs\chap1.txt".
Anotações para chamadores
Os clientes moniker normalmente não precisam chamar RelativePathTo. Esse método é chamado principalmente pelo manipulador padrão para objetos vinculados. Os objetos vinculados contêm um moniker absoluto e relativo para identificar a origem do link. (Isso habilita o rastreamento de link se o usuário move uma árvore de diretório que contém os arquivos de contêiner e de origem.) O manipulador padrão chama esse método para criar um moniker relativo do documento de contêiner para a origem do link. (Ou seja, ele chama RelativePathTo no moniker que identifica o documento do contêiner, passando o moniker identificando a origem do link como o parâmetro pmkOther .)Se você chamar RelativePathTo, chame-o apenas em monikers absolutos, por exemplo, um moniker de arquivo ou um moniker composto cujo componente mais à esquerda é um moniker de arquivo, em que o moniker de arquivo representa um caminho absoluto. Não chame esse método em monikers relativos.
Anotações aos implementadores
Sua implementação de RelativePathTo deve primeiro determinar se pmkOther é um moniker de uma classe que você reconhece e para a qual você pode fornecer tratamento especial (por exemplo, se ele for da mesma classe que este moniker). Nesse caso, sua implementação deve determinar o caminho relativo. Caso contrário, ele deverá passar ambos os monikers em uma chamada para a função MonikerRelativePathTo , que manipula corretamente o caso genérico.A primeira etapa para determinar um caminho relativo é determinar o prefixo comum desse moniker e pmkOther. A próxima etapa é dividir esse moniker e pmkOther em duas partes cada, digamos (P, myTail) e (P, otherTail), respectivamente, em que P é o prefixo comum. O caminho relativo correto é então o inverso de myTail composto com otherTail:
Comp( Inv( myTail ), otherTail )
em que Comp() representa a operação de composição e Inv() representa a operação inversa.
Para determinados tipos de monikers, você não pode usar o método IMoniker::Inverse para construir o inverso de myTail. Por exemplo, um moniker de arquivo retorna um anti-moniker como um inverso, enquanto seu método RelativePathTo deve usar um ou mais monikers de arquivo que representam cada um o caminho ".." para construir o inverso de myTail.
Notas específicas da implementação
Implementação | Observações |
---|---|
Anti-moniker | Esse método retorna MK_S_HIM e define *ppmkRelPath como o outro moniker. |
Moniker de classe | Esse método retorna o resultado de chamar MonikerRelativePathTo com pmkSrc igual a este moniker, pmkOther, ppmkRelPath e TRUE como dwReserved. |
Moniker de arquivo | Esse método calcula um moniker que, quando composto à direita desse moniker, produz o outro moniker. Por exemplo, se o caminho desse moniker for "C:\work\docs\report.doc" e se o outro moniker for "C:\work\art\picture.bmp", o caminho do moniker computado será ".. \.. \art\picture.bmp". |
Moniker composto genérico | Esse método localiza o prefixo comum dos dois monikers e cria dois monikers que consistem no restante quando o prefixo comum é removido. Em seguida, ele cria o inverso para o restante deste moniker e compõe o restante do outro moniker à direita dele. |
Moniker de item | Esse método retorna MK_E_NOTBINDABLE e define *ppmkRelPath como NULL. |
Moniker OBJREF | Esse método retorna E_NOTIMPL. |
Moniker de ponteiro | Esse método retorna E_NOTIMPL. |
Moniker de URL | Esse método retorna E_NOTIMPL. |
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 2000 Professional [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows 2000 Server [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | objidl.h |