次の方法で共有


RoGetParameterizedTypeInstanceIID 関数 (roparameterizediid.h)

パラメーター化されたインターフェイスまたはデリゲートが、指定した型引数を使用してインスタンス化されるときに発生するインターフェイスまたはデリゲート型のインターフェイス識別子 (IID) を計算します。

構文

HRESULT RoGetParameterizedTypeInstanceIID(
                  UINT32                     nameElementCount,
  [in]            PCWSTR                     *nameElements,
  [in]            const IRoMetaDataLocator & metaDataLocator,
  [out]           GUID                       *iid,
  [out, optional] ROPARAMIIDHANDLE           *pExtra
);

パラメーター

nameElementCount

種類: UINT32

nameElements 内の要素の数。

[in] nameElements

種類: PCWSTR*

RoParseTypeName 関数によって返される、解析されたWindows ランタイム型名。 たとえば、"Windows.Foundation.Collections.IVector'1"、"N1" などです。N2。IFoo"

[in] metaDataLocator

型: const IRoMetaDataLocator

メタデータの解決に使用するコールバック。

実装では 、RoGetMetaDataFile 関数を使用して、必要なメタデータ (.winmd) ファイルを検出し、メタデータを調べて必要な型情報を決定する必要があります。 RoGetMetaDataFile 関数は結果をキャッシュしないため、ロケーターは実装するプログラミング モデルに応じて結果をキャッシュする必要があります。

[out] iid

型: GUID*

nameElements に対応するインターフェイスまたはデリゲートの IID。

[out, optional] pExtra

型: ROPARAMIIDHANDLE*

nameElements に対応する IID を処理します。

戻り値

種類: HRESULT

リターン コード 説明
S_OK
呼び出しに成功しました。
E_OUTOFMEMORY
タスクを完了するために使用できるメモリが不足しています。
E_INVALIDARG
パラメーター化された型に対して、型引数の数が間違っています。
 

型が表示されるコンテキストに不適切な場合にも、エラーが発生する可能性があります。

注釈

RoGetParameterizedTypeInstanceIID 関数は、プログラミング言語の実装者が使用します。

この関数はステートレスです。 metaDataLocator 引数は呼び出し間で保持されず、呼び出しが返されるとすぐに解放される可能性があります。

RoGetParameterizedTypeInstanceIID 関数は、深いセマンティック分析を実行しません。 たとえば、 IRoSimpleMetaDataBuilder が構造体にインターフェイス ポインターが含まれていることを指定した場合、このようなメタデータが意味的に無効であっても、この関数は成功を返します。 このような場合、返される IID の値は指定されていません。

この関数は、引数として指定されたメタデータ ロケーターを再帰的に呼び出すことができます。

IRoSimpleMetaDataBuilder 関数の呼び出しが失敗した場合、この関数はそのエラー コードを返します。


#include <stdlib.h>
#include <windows.h>
#include <winrt/paraminstanceapi.h>

HRESULT ExampleMetadataLocator(
    PCWSTR name, 
    IRoSimpleMetaDataBuilder& builder)
{
    if (wcscmp(L"Example.IParam`1", name) == 0)
    {
        GUID piidParam= { /* 22046e87-28b5-4c53-9804-bc69f6ee0299 */
            0x22046e87,
            0x28b5,
            0x4c53,
            {0x98, 0x04, 0xbc, 0x69, 0xf6, 0xee, 0x02, 0x99}
        };
        builder.SetParameterizedInterface(piidParam, 1);
    }
    else if (wcscmp(L"Example.InterfaceGroup", name) == 0)
    {
        builder.SetInterfaceGroupSimpleDefault(name, L"Example.IFoo", nullptr);
    }
    else if (wcscmp(L"Example.IFoo", name) == 0)
    {
        GUID iidFoo = { /* f7f968c2-b1d8-47e0-98db-1b04f2bba657 */
            0xf7f968c2,
            0xb1d8,
            0x47e0,
            {0x98, 0xdb, 0x1b, 0x04, 0xf2, 0xbb, 0xa6, 0x57}
        };
        builder.SetWinRtInterface(iidFoo);
    }
    return E_ABORT;
}

int main()
{
    // example, compute IID
    GUID iidResult;
    PCWSTR names = { L"Example.IParam`1", L"Example.InterfaceGroup" };
    HRESULT hr = RoGetParameterizedTypeInstanceIID(
        2,
        names,
        Ro::Locator(&ExampleMetadataLocator),
        &iidResult);
}


要件

要件
サポートされている最小のクライアント Windows 8 [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows Server 2012 [デスクトップ アプリ |UWP アプリ]
対象プラットフォーム Windows
ヘッダー roparameterizediid.h
[DLL] Api-ms-win-core-winrt-roparameterizediid-l1-1-0.dll