共用方式為


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*

剖析 Windows 執行階段 類型名稱,如 RoParseTypeName 函式所傳回。 例如,“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