MkParseDisplayName 関数 (objbase.h)

文字列を、文字列で指定された オブジェクトを識別するモニカーに変換します。

この関数は、モニカーに関連付けられている表示名を取得する IMoniker::GetDisplayName 操作の逆関数です。

構文

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

パラメーター

[in] pbc

このバインド操作で使用されるバインド コンテキスト オブジェクトの IBindCtx インターフェイスへのポインター。

[in] szUserName

解析する表示名へのポインター。

[out] pchEaten

使用された szUserName の文字数へのポインター。 関数が成功した場合、*pchEatenszUserName の長さです。それ以外の場合は、正常に解析された文字数です。

[out] ppmk

szUserName から構築されたモニカーへのインターフェイス ポインターを受け取る IMoniker* ポインター変数のアドレス。 成功すると、関数はモニカーで AddRef を呼び出し、呼び出し元は Release の呼び出しを担当します。 エラーが発生した場合、指定されたインターフェイス ポインターには、エラーが発生する前にメソッドが作成できたモニカーの量が含まれます。

戻り値

この関数は、E_OUTOFMEMORY標準の戻り値と、次の値を返すことができます。

リターン コード 説明
S_OK
解析操作が成功し、モニカーが作成されました。
MK_E_SYNTAX
ファイル名の構文のエラー、または結果の複合モニカーの構文でのエラー。
 

この関数は、 IMoniker::BindToObjectIOleItemContainer::GetObject、または IParseDisplayName::P arseDisplayName によって返されるエラー値のいずれかを返すこともできます。

注釈

MkParseDisplayName 関数は、人間が判読できる名前をモニカーに解析し、リンク ソースを識別するために使用できます。 結果として得られるモニカーは、単純なモニカー (ファイル モニカーなど) でも、コンポーネント モニカーの部分で構成される汎用複合でもかまいません。 たとえば、表示名 "c:\mydir\somefile!item 1"

は、"c:\mydir\somefile" に基づく FileMoniker) + ("item 1" に基づく ItemMoniker) という汎用複合モニカーに解析できます。

MkParseDisplayName の最も一般的な用途は、標準の [リンク] ダイアログ ボックスの実装です。これにより、エンド ユーザーは文字列を入力してリンク オブジェクトのソースを指定できます。 また、アプリケーションでリモート参照を許可するマクロ言語 (ドキュメント外の要素への参照) がサポートされている場合は、 MkParseDisplayName を呼び出す必要があります。

多くの場合、表示名を解析するには、バインド操作中にアクティブ化されるのと同じオブジェクトをアクティブ化する必要があるため、バインドと同じくらいコストが高くなる可能性があります (パフォーマンスの観点から)。 解析操作中にバインドされたオブジェクトは、関数に渡されるバインド コンテキストにキャッシュされます。 MkParseDisplayName によって返されたモニカーをバインドする予定の場合は、同じバインド コンテキストを使用して関数が戻った直後にバインドすることをお勧めします。これにより、オブジェクトを 2 回目にアクティブ化する必要がなくなります。

MkParseDisplayName は、認識されているのと同じ数の表示名をモニカーに解析します。 次に、関数は、新しく作成されたモニカーで IMoniker::P arseDisplayName を呼び出し、表示名の残りの部分を渡します。 ParseDisplayName によって返されるモニカーは、既存のモニカーの末尾に構成され、表示名のいずれかが解析されていない場合は、コンポジションの結果に対して ParseDisplayName が呼び出されます。 このプロセスは、表示名全体が解析されるまで繰り返されます。

MkParseDisplayName は、成功した最初のものを使用して、表示名の先頭を解析するために次の方法を試みます。

  1. 関数は、実行中のオブジェクト テーブルで、有効なファイル名文字のみで構成される表示名のすべてのプレフィックスに対応するファイル モニカーを検索します。 この方法では、まだ保存されていないドキュメントを特定できます。
  2. 関数は、有効なファイル名文字のみで構成される表示名の最大プレフィックスをチェックして、OLE 1 ドキュメントがその名前で登録されているかどうかを確認します。 この場合、返されるモニカーは、OLE 2 の OLE 1 互換性レイヤーによって提供される内部モニカーです。
  3. 関数は、表示名のプレフィックスが既存のファイルと一致するかどうかをチェックするファイル システムを参照します。 ファイル名には、ドライブ絶対、ドライブ相対、作業ディレクトリ相対、または明示的なネットワーク共有名で始めることができます。 これは一般的なケースです。
  4. 表示名の最初の文字が '@' の場合、関数は有効な ProgID 構文に準拠する文字列の直後に最長の文字列を検索します。 関数は、 CLSIDFromProgID 関数を使用して、この文字列を CLSID に変換します。 CLSID が OLE 2 クラスを表す場合、関数は対応するクラス オブジェクトを読み込み、 IParseDisplayName インターフェイス ポインターを要求します。 結果として得られる IParseDisplayName インターフェイスには、解析する文字列全体が '@' から始まります。 CLSID が OLE 1 クラスを表す場合、この関数は ProgID に続く文字列を、 ファイル名|項目 構文を持つ OLE1/DDE リンク指定子として扱います。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリ |UWP アプリ]
対象プラットフォーム Windows
ヘッダー objbase.h
Library Ole32.lib
[DLL] Ole32.dll
API セット ext-ms-win-com-ole32-l1-1-1 (Windows 8.1で導入)

こちらもご覧ください

IMoniker::GetDisplayName

IMoniker::P arseDisplayName

IParseDisplayName