Freigeben über


IMoniker::RelativePathTo-Methode (objidl.h)

Erstellt einen relativen Moniker zwischen diesem Moniker und dem angegebenen Moniker.

Syntax

HRESULT RelativePathTo(
  [in]  IMoniker *pmkOther,
  [out] IMoniker **ppmkRelPath
);

Parameter

[in] pmkOther

Ein Zeiger auf die IMoniker-Schnittstelle auf dem Moniker, zu dem ein relativer Pfad genommen werden soll.

[out] ppmkRelPath

Ein Zeiger auf eine IMoniker-Zeigervariable , die den Schnittstellenzeiger auf den relativen Moniker empfängt. Bei erfolgreicher Implementierung muss AddRef für den neuen Moniker aufgerufen werden. Es liegt in der Verantwortung des Aufrufers , Release aufzurufen. Wenn ein Fehler auftritt, legt die Implementierung *ppmkRelPath auf NULL fest.

Rückgabewert

Diese Methode kann die Standardrückgabewerte E_OUTOFMEMORY und E_UNEXPECTED sowie die folgenden Werte zurückgeben.

Rückgabecode BESCHREIBUNG
S_OK
Die Methode wurde erfolgreich abgeschlossen.
MK_S_HIM
Kein gemeinsames Präfix wird von den beiden Monikern gemeinsam verwendet, und der in ppmkRelPath zurückgegebene Moniker ist pmkOther.
MK_E_NOTBINDABLE
Dieser Moniker ist ein relativer Moniker, z. B. ein Itemmoniker. Dieser Moniker muss mit dem Moniker seines Containers zusammengesetzt sein, bevor ein relativer Pfad bestimmt werden kann.

Hinweise

Ein relativer Moniker ist analog zu einem relativen Pfad (z. B. ".. \backup"). Angenommen, Sie haben einen Moniker, der den Pfad "c:\projects\secret\art\pict1.bmp" darstellt, und einen weiteren Moniker, der den Pfad "c:\projects\secret\docs\chap1.txt" darstellt. Das Aufrufen von RelativePathTo für den ersten Moniker und übergeben den zweiten als pmkOther-Parameter , würde einen relativen Moniker erstellen, der den Pfad ".. \docs\chap1.txt".

Hinweise für Anrufer

Moniker-Clients müssen RelativePathTo in der Regel nicht aufrufen. Diese Methode wird hauptsächlich vom Standardhandler für verknüpfte Objekte aufgerufen. Verknüpfte Objekte enthalten sowohl einen absoluten als auch einen relativen Moniker, um die Linkquelle zu identifizieren. (Dadurch wird die Linknachverfolgung aktiviert, wenn der Benutzer eine Verzeichnisstruktur verschiebt, die sowohl den Container als auch die Quelldateien enthält.) Der Standardhandler ruft diese Methode auf, um einen relativen Moniker aus dem Containerdokument zur Linkquelle zu erstellen. (Das heißt, er ruft RelativePathTo auf dem Moniker auf, der das Containerdokument identifiziert, und übergibt den Moniker, der die Linkquelle als pmkOther-Parameter identifiziert.)

Wenn Sie RelativePathTo aufrufen, rufen Sie ihn nur für absolute Moniker auf, z. B. einen Dateimoniker oder einen zusammengesetzten Moniker, dessen linke Komponente ein Dateimoniker ist, wobei der Dateimoniker einen absoluten Pfad darstellt. Rufen Sie diese Methode nicht für relative Moniker auf.

Hinweise zu Implementierern

Ihre Implementierung von RelativePathTo sollte zunächst bestimmen, ob pmkOther ein Moniker einer Klasse ist, die Sie erkennen und für die Sie eine spezielle Behandlung bereitstellen können (z. B. wenn es sich um dieselbe Klasse wie dieser Moniker handelt). Wenn ja, sollte Ihre Implementierung den relativen Pfad bestimmen. Andernfalls sollten beide Moniker in einem Aufruf an die MonikerRelativePathTo-Funktion übergeben werden, die den generischen Fall ordnungsgemäß verarbeitet.

Der erste Schritt bei der Bestimmung eines relativen Pfads besteht darin, das allgemeine Präfix dieses Monikers und pmkOther zu bestimmen. Der nächste Schritt besteht darin, diesen Moniker und pmkOther jeweils in zwei Teile zu unterteilen, z. B. (P, myTail) bzw. (P, otherTail), wobei P das allgemeine Präfix ist. Der richtige relative Pfad ist dann die Inverse von myTail, die mit otherTail zusammengesetzt ist:

Comp( Inv( myTail ), otherTail )

Wobei Comp() den Kompositionsvorgang und Inv() den umgekehrten Vorgang darstellt.

Für bestimmte Monikertypen können Sie die IMoniker::Inverse-Methode nicht verwenden, um die Inverse von myTail zu erstellen. Ein Dateimoniker gibt beispielsweise einen Antimoniker als Inverse zurück, während seine RelativePathTo-Methode einen oder mehrere Dateimoniker verwenden muss, die jeweils den Pfad ".." darstellen, um die Inverse von myTail zu erstellen.

Implementierungsspezifische Hinweise

Implementierung Hinweise
Antimoniker Diese Methode gibt MK_S_HIM zurück und legt *ppmkRelPath auf den anderen Moniker fest.
Klassenmoniker Diese Methode gibt das Ergebnis des Aufrufens von MonikerRelativePathTo mit pmkSrc gleich diesem Moniker, pmkOther, ppmkRelPath und TRUE als dwReserved zurück.
Dateimoniker Diese Methode berechnet einen Moniker, der, wenn er rechts von diesem Moniker zusammengesetzt ist, den anderen Moniker ergibt. Wenn der Pfad dieses Monikers beispielsweise "C:\work\docs\report.doc" ist und der andere Moniker "C:\work\art\picture.bmp" ist, lautet der Pfad des berechneten Monikers ".. \.. \art\picture.bmp".
Generischer zusammengesetzter Moniker Diese Methode findet das allgemeine Präfix der beiden Moniker und erstellt zwei Moniker, die aus dem Rest bestehen, wenn das allgemeine Präfix entfernt wird. Dann erzeugt es die Inverse für den Rest dieses Monikers und setzt den Rest des anderen Monikers rechts davon zusammen.
Elementmoniker Diese Methode gibt MK_E_NOTBINDABLE zurück und legt *ppmkRelPath auf NULL fest.
OBJREF-Moniker Diese Methode gibt E_NOTIMPL zurück.
Zeigermoniker Diese Methode gibt E_NOTIMPL zurück.
URL-Moniker Diese Methode gibt E_NOTIMPL zurück.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile objidl.h

Weitere Informationen

Imoniker

MonikerRelativePathTo