RoGetParameterizedTypeInstanceIID-Funktion (roparameterizediid.h)

Berechnet den Schnittstellenbezeichner (Interface Identifier, IID) des Schnittstellen- oder Delegattyps, der sich ergibt, wenn eine parametrisierte Schnittstelle oder ein Delegat mit den angegebenen Typargumenten instanziiert wird.

Syntax

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

Parameter

nameElementCount

Typ: UINT32

Anzahl der Elemente in nameElements.

[in] nameElements

Typ: PCWSTR*

Ein analysierter Windows-Runtime Typnamen, der von der RoParseTypeName-Funktion zurückgegeben wird. Beispiel: "Windows.Foundation.Collections.IVector'1" und "N1. N2. IFoo".

[in] metaDataLocator

Typ: const IRoMetaDataLocator

Ein Rückruf, der zum Auflösen von Metadaten verwendet werden soll.

Eine Implementierung sollte die RoGetMetaDataFile-Funktion verwenden, um die erforderliche Metadatendatei (.winmd) zu ermitteln und die Metadaten zu untersuchen, um die erforderlichen Typinformationen zu ermitteln. Da die RoGetMetaDataFile-Funktion keine Ergebnisse zwischenspeichert, sollten Locators die Ergebnisse entsprechend dem implementierten Programmiermodell zwischenspeichern.

[out] iid

Typ: GUID*

Die IID der Schnittstelle oder des Delegaten, die nameElements entspricht.

[out, optional] pExtra

Typ: ROPARAMIIDHANDLE*

Handle für die IID, die nameElements entspricht.

Rückgabewert

Typ: HRESULT

Rückgabecode BESCHREIBUNG
S_OK
Der Aufruf war erfolgreich.
E_OUTOFMEMORY
Unzureichender Arbeitsspeicher, um die Aufgabe abzuschließen.
E_INVALIDARG
Die falsche Anzahl von Typargumenten wird für einen parametrisierten Typ bereitgestellt.
 

Ein Fehler kann auch auftreten, wenn ein Typ für den Kontext, in dem er angezeigt wird, ungeeignet ist.

Hinweise

Die RoGetParameterizedTypeInstanceIID-Funktion ist für die Verwendung durch Programmiersprachenimplementierer vorgesehen.

Diese Funktion ist zustandslos. Das metaDataLocator-Argument wird zwischen Aufrufen nicht beibehalten und kann freigegeben werden, sobald der Aufruf zurückgegeben wird.

Die RoGetParameterizedTypeInstanceIID-Funktion führt keine umfassende semantische Analyse durch. Wenn für instance IRoSimpleMetaDataBuilder angibt, dass eine Struktur einen Schnittstellenzeiger enthält, gibt diese Funktion erfolgreich zurück, obwohl solche Metadaten semantisch ungültig sind. Der Wert der zurückgegebenen IID ist in solchen Fällen nicht angegeben.

Diese Funktion kann rekursiv den Metadatenlocator aufrufen, der als Argument bereitgestellt wird.

Wenn bei einem Aufruf der IRoSimpleMetaDataBuilder-Funktion ein Fehler auftritt, gibt diese Funktion diesen Fehlercode zurück.

Beispiele


#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);
}


Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 8 [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2012 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile roparameterizediid.h
DLL Api-ms-win-core-winrt-roparameterizediid-l1-1-0.dll