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 |
---|---|
|
Der Aufruf war erfolgreich. |
|
Unzureichender Arbeitsspeicher, um die Aufgabe abzuschließen. |
|
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 |