MkParseDisplayName-Funktion (objbase.h)

Konvertiert eine Zeichenfolge in einen Moniker, der das Durch die Zeichenfolge benannte Objekt identifiziert.

Diese Funktion ist die Umgekehrte des IMoniker::GetDisplayName-Vorgangs , der den einem Moniker zugeordneten Anzeigenamen abruft.

Syntax

HRESULT MkParseDisplayName(
  [in]  LPBC      pbc,
  [in]  LPCOLESTR szUserName,
  [out] ULONG     *pchEaten,
  [out] LPMONIKER *ppmk
);

Parameter

[in] pbc

Ein Zeiger auf die IBindCtx-Schnittstelle für das Bindungskontextobjekt, das in diesem Bindungsvorgang verwendet werden soll.

[in] szUserName

Ein Zeiger auf den Anzeigenamen, der analysiert werden soll.

[out] pchEaten

Ein Zeiger auf die Anzahl der verwendeten Zeichen von szUserName . Wenn die Funktion erfolgreich ist, ist *pchEaten die Länge von szUserName; Andernfalls ist dies die Anzahl der erfolgreich analysierten Zeichen.

[out] ppmk

Die Adresse der IMoniker*-Zeigervariable, die den Schnittstellenzeiger auf den Moniker empfängt, der aus szUserName erstellt wurde. Bei erfolgreicher Ausführung hat die Funktion AddRef für den Moniker aufgerufen, und der Aufrufer ist für den Aufruf von Release verantwortlich. Wenn ein Fehler auftritt, enthält der angegebene Schnittstellenzeiger den größtmöglichen Teil des Monikers, den die Methode vor dem Auftreten des Fehlers erstellen konnte.

Rückgabewert

Diese Funktion kann den Standardrückgabewert E_OUTOFMEMORY sowie die folgenden Werte zurückgeben.

Rückgabecode BESCHREIBUNG
S_OK
Der Analysevorgang war erfolgreich, und der Moniker wurde erstellt.
MK_E_SYNTAX
Fehler in der Syntax eines Dateinamens oder Fehler in der Syntax des resultierenden zusammengesetzten Monikers.
 

Diese Funktion kann auch alle Fehlerwerte zurückgeben, die von IMoniker::BindToObject, IOleItemContainer::GetObject oder IParseDisplayName::P arseDisplayName zurückgegeben werden.

Hinweise

Die MkParseDisplayName-Funktion analysiert einen für Menschen lesbaren Namen in einen Moniker, der zum Identifizieren einer Linkquelle verwendet werden kann. Der resultierende Moniker kann ein einfacher Moniker (z. B. ein Dateimoniker) oder ein generischer Zusammengesetzter sein, der aus den Komponentenmonikerelementen besteht. Beispielsweise der Anzeigename "c:\mydir\somefile!item 1"

könnte in den folgenden generischen zusammengesetzten Moniker analysiert werden: FileMoniker basierend auf "c:\mydir\somefile") + (ItemMoniker basierend auf "Element 1").

MkParseDisplayName wird am häufigsten in der Implementierung des Standarddialogfelds Links verwendet, in dem ein Endbenutzer die Quelle eines verknüpften Objekts angeben kann, indem er eine Zeichenfolge eingibt. Möglicherweise müssen Sie auch MkParseDisplayName aufrufen, wenn Ihre Anwendung eine Makrosprache unterstützt, die Remoteverweise zulässt (Verweis auf Elemente außerhalb des Dokuments).

Das Analysieren eines Anzeigenamens erfordert häufig die Aktivierung der gleichen Objekte, die während eines Bindungsvorgangs aktiviert würden, sodass dies (in Bezug auf die Leistung) genauso teuer wie die Bindung sein kann. Objekte, die während des Analysevorgangs gebunden sind, werden im Bindungskontext zwischengespeichert, der an die Funktion übergeben wird. Wenn Sie planen, den von MkParseDisplayName zurückgegebenen Moniker zu binden, empfiehlt es sich, dies unmittelbar nach der Rückgabe der Funktion zu tun, indem Sie denselben Bindungskontext verwenden, wodurch die Notwendigkeit entfällt, Objekte ein zweites Mal zu aktivieren.

MkParseDisplayName analysiert so viel des Anzeigenamens, wie er versteht, in einen Moniker. Die Funktion ruft dann IMoniker::P arseDisplayName für den neu erstellten Moniker auf und übergibt den Rest des Anzeigenamens. Der von ParseDisplayName zurückgegebene Moniker wird am Ende des vorhandenen Monikers zusammengesetzt, und wenn einer der Anzeigenamen nicht analysiert wird, wird ParseDisplayName für das Ergebnis der Komposition aufgerufen. Dieser Vorgang wird wiederholt, bis der gesamte Anzeigename analysiert wurde.

MkParseDisplayName versucht die folgenden Strategien, um den Anfang des Anzeigenamens zu analysieren, und verwendet dabei den ersten, der erfolgreich ist:

  1. Die Funktion sucht in der Ausführenden Objekttabelle nach Dateimonikern, die allen Präfixen des Anzeigenamens entsprechen, die ausschließlich aus gültigen Dateinamenzeichen bestehen. Diese Strategie kann Dokumente identifizieren, die noch nicht gespeichert wurden.
  2. Die Funktion überprüft das maximale Präfix des Anzeigenamens, der ausschließlich aus gültigen Dateinamenzeichen besteht, um festzustellen, ob ein OLE 1-Dokument mit diesem Namen registriert ist. In diesem Fall ist der zurückgegebene Moniker ein interner Moniker, der von der OLE 1-Kompatibilitätsebene von OLE 2 bereitgestellt wird.
  3. Die Funktion überprüft im Dateisystem, ob ein Präfix des Anzeigenamens mit einer vorhandenen Datei übereinstimmt. Der Dateiname kann laufwerksunabhängig, laufwerksrelative, arbeitsverzeichnisrelative oder mit einem expliziten Netzwerkfreigabenamen beginnen. Dies ist der Normalfall.
  4. Wenn das Anfangszeichen des Anzeigenamens "@" lautet, findet die Funktion die längste Zeichenfolge, die unmittelbar darauf folgt, die der gesetzlichen ProgID-Syntax entspricht. Die Funktion konvertiert diese Zeichenfolge mithilfe der CLSIDFromProgID-Funktion in eine CLSID . Wenn die CLSID eine OLE 2-Klasse darstellt, lädt die Funktion das entsprechende Klassenobjekt und fragt nach einem IParseDisplayName-Schnittstellenzeiger . Die resultierende IParseDisplayName-Schnittstelle erhält dann die gesamte zu analysierende Zeichenfolge, beginnend mit "@". Wenn die CLSID eine OLE 1-Klasse darstellt, behandelt die Funktion die Zeichenfolge, die der ProgID folgt, als OLE1/DDE-Linkdesignator mitDateinamenelementsyntax|.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile objbase.h
Bibliothek Ole32.lib
DLL Ole32.dll
APIs ext-ms-win-com-ole32-l1-1-1 (eingeführt in Windows 8.1)

Weitere Informationen

IMoniker::GetDisplayName

IMoniker::P arseDisplayName

IParseDisplayName