Método IMoniker::CommonPrefixWith (objidl.h)
Cria um novo moniker com base no prefixo que esse moniker tem em comum com o moniker especificado.
Sintaxe
HRESULT CommonPrefixWith(
[in] IMoniker *pmkOther,
[out] IMoniker **ppmkPrefix
);
Parâmetros
[in] pmkOther
Um ponteiro para a interface IMoniker em outro moniker a ser comparado com este para determinar se há um prefixo comum.
[out] ppmkPrefix
O endereço de uma variável de ponteiro IMoniker* que recebe o ponteiro de interface para o moniker que é o prefixo comum desse moniker e pmkOther. Quando bem-sucedida, a implementação deve chamar AddRef no moniker resultante; é responsabilidade do chamador chamar Release. Se ocorrer um erro ou se não houver nenhum prefixo comum, a implementação deverá definir *ppmkPrefix como NULL.
Retornar valor
Esse método pode retornar os valores de retorno padrão E_OUTOFMEMORY, bem como os valores a seguir.
Código de retorno | Descrição |
---|---|
|
Existe um prefixo comum que não é nem esse moniker nem pmkOther. |
|
Não existe nenhum prefixo comum. |
|
O pmkOther inteiro é um prefixo desse moniker. |
|
Os dois monikers são idênticos. |
|
Esse moniker é um prefixo do moniker pmkOther . |
|
Esse método foi chamado em um moniker relativo. Não é significativo usar o prefixo comum em um moniker relativo. |
Comentários
CommonPrefixWith cria um novo moniker que consiste nos prefixos comuns do moniker neste objeto moniker e outro moniker. Por exemplo, se um moniker representa o caminho "c:\projects\secret\art\pict1.bmp" e outro moniker representa o caminho "c:\projects\secret\docs\chap1.txt", o prefixo comum desses dois monikers seria um moniker que representa o caminho "c:\projects\secret".
Anotações para chamadores
O método CommonPrefixWith é chamado principalmente na implementação do método IMoniker::RelativePathTo . Os clientes que usam um moniker para localizar um objeto raramente precisam chamar esse método.Chame esse método somente se pmkOther e esse moniker forem monikers absolutos. Um moniker absoluto é um moniker de arquivo ou uma composição genérica cujo componente mais à esquerda é um moniker de arquivo que representa um caminho absoluto. Não chame esse método em monikers relativos porque ele não produziria resultados significativos.
Anotações aos implementadores
Sua implementação 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 for da mesma classe que este moniker). Nesse caso, sua implementação deve determinar o prefixo comum dos dois monikers. Caso contrário, ele deverá passar ambos os monikers em uma chamada para a função MonikerCommonPrefixWith , que manipula corretamente o caso genérico.Notas específicas da implementação
Implementação | Observações |
---|---|
Anti-moniker | Se o outro moniker também for um anti-moniker, o método retornará MK_S_US e definirá ppmkPrefix para esse moniker. Caso contrário, o método chamará a função MonikerCommonPrefixWith . Essa função manipula corretamente o caso em que o outro moniker é uma composição genérica. |
Moniker de classe | Se pmkOther for igual a esse moniker, recuperará um ponteiro para esse moniker e retornará MK_S_US. Se pmkOther for um moniker de classe, mas não for igual a esse moniker, retornará MK_E_NOPREFIX. Caso contrário, retorna o resultado de chamar MonikerCommonPrefixWith consigo mesmo como pmkThis, pmkOther e ppmkPrefix, que manipula o caso em que pmkOther é um moniker composto genérico. |
Moniker de arquivo |
Se ambos os monikers forem monikers de arquivo, esse método retornará um moniker de arquivo baseado nos componentes comuns no início de dois monikers de arquivo. Os componentes de um moniker de arquivo podem ser dos seguintes tipos:
Esse método retornará MK_E_NOPREFIX se não houver nenhum prefixo comum. |
Moniker composto genérico |
Se o outro moniker for uma composição, esse método comparará os componentes de cada composição da esquerda para a direita. O moniker de prefixo comum retornado também pode ser um moniker composto, dependendo de quantos dos componentes mais à esquerda eram comuns a ambos os monikers. Se o outro moniker não for uma composição, o método simplesmente o comparará com o componente mais à esquerda desse moniker.
Se os monikers forem iguais, o método retornará MK_S_US e definirá ppmkPrefix como este moniker. Se o outro moniker for um prefixo desse moniker, o método retornará MK_S_HIM e definirá ppmkPrefix como o outro moniker. Se esse moniker for um prefixo do outro, esse método retornará MK_S_ME e definirá ppmkPrefix para esse moniker. Se não houver nenhum prefixo comum, esse método retornará MK_E_NOPREFIX e definirá ppmkPrefix como NULL. |
Moniker de item | Se o outro moniker for um moniker de item igual a esse moniker, esse método definirá *ppmkPrefix como este moniker e retornará MK_S_US; caso contrário, o método chamará a função MonikerCommonPrefixWith . Essa função manipula corretamente o caso em que o outro moniker é uma composição genérica. |
Moniker OBJREF |
Se os dois monikers forem iguais, esse método retornará MK_S_US e definirá *ppmkPrefix como NULL. Se o outro moniker não for um moniker OBJREF, esse método passará ambos os monikers para a função MonikerCommonPrefixWith . Essa função manipula corretamente o caso em que o outro moniker é uma composição genérica.
Se não houver nenhum prefixo comum, esse método retornará MK_E_NOPREFIX. |
Moniker de ponteiro | Se os dois monikers forem iguais, esse método retornará MK_S_US e definirá *ppmkPrefix como este moniker. Caso contrário, o método retorna MK_E_NOPREFIX e define *ppmkPrefix como NULL. |
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 |