Freigeben über


RoResolveNamespace-Funktion (rometadataresolution.h)

Bestimmen Sie die direkten untergeordneten Elemente, Typen und Unternamespaces des angegebenen Windows-Runtime-Namespaces aus jeder Programmiersprache, die vom Windows-Runtime unterstützt wird.

Syntax

HRESULT RoResolveNamespace(
  [in, optional]  const HSTRING name,
  [in, optional]  const HSTRING windowsMetaDataDir,
  [in]            const DWORD   packageGraphDirsCount,
  [in, optional]  const HSTRING *packageGraphDirs,
  [out, optional] DWORD         *metaDataFilePathsCount,
  [out, optional] HSTRING       **metaDataFilePaths,
  [out, optional] DWORD         *subNamespacesCount,
  [out, optional] HSTRING       **subNamespaces
);

Parameter

[in, optional] name

Typ: const HSTRING

Vollständiger Namespace, für den wir versuchen, direkte untergeordnete Elemente abzurufen. Dies ist ein erforderlicher Parameter.

Wenn dieser Namespace leer oder nullptr ist, gibt die RoResolveNamespace-Funktion Namespaces der obersten Ebene zurück. Sowohl Windows als auch andere Namespaces der obersten Ebene befinden sich im Paketdiagramm.

[in, optional] windowsMetaDataDir

Typ: const HSTRING

Optionaler Parameter, der einen Pfad zum SDK-Verzeichnis zum Suchen nach Metadatendateien (.winmd) enthält.

Wenn dieser Parameter nicht angegeben ist (entweder leer oder nullptr), sucht die Funktion im Windows-Standardmetadatenverzeichnis %windir%\System32\WinMetadata.

[in] packageGraphDirsCount

Typ: const DWORD

Anzahl der Pfade im PackageGraphDirs-Array .

[in, optional] packageGraphDirs

Typ: const HSTRING*

Anzahl der Paketpfade im expliziten Paket Abhängigkeitsdiagramm Arrays. Die Anzahl wird ignoriert, wenn packageGraphDirsnullptr ist.

[out, optional] metaDataFilePathsCount

Typ: DWORD*

Anzahl der Metadatendateien im MetaDataFilePaths-Array .

[out, optional] metaDataFilePaths

Typ: HSTRING**

Optionaler Ausgabeparameter, der aufgerufene zugeordnete Array absoluter Dateipfade aller Metadatendateien (.winmd) enthält, die möglicherweise direkte untergeordnete Namen enthalten können.

[out, optional] subNamespacesCount

Typ: DWORD*

Anzahl der Metadatendateien im Array "subNamespaces ".

[out, optional] subNamespaces

Typ: HSTRING**

Optionaler Ausgabeparameter, der ein vom Anrufer zugeordnetes Array von Namen direkter untergeordneter Elemente des angegebenen Namespace enthält. Diese Liste ist ein Hinweis auf andere Unternamespaces und nicht unbedingt vollständig.

Rückgabewert

Typ: HRESULT

Diese Funktion kann einen dieser Werte zurückgeben.

Rückgabecode BESCHREIBUNG
S_OK
Die direkte Auflösung untergeordneter Namespaces ist erfolgreich, was bedeutet, dass mindestens eine Datei oder ein Unternamespacename gefunden wurde.
RO_E_METADATA_NAME_NOT_FOUND
Gibt einen der folgenden An:
  • Die Ausgabeparameter metaDataFilePaths und subNamespaces sind festgelegt, aber es wurden keine Metadatendateien und keine Unternamespaces für den angegebenen Namespace gefunden.
  • MetaDataFilePaths ist nur festgelegt, aber es wurden keine Metadatendateien für den angegebenen Namespace gefunden.
  • Nur subNamespaces ist festgelegt, aber es wurden keine Unternamespaces für den angegebenen Namespace gefunden.
E_INVALIDARG
Gibt einen der folgenden An:
  • Sowohl metaDataFilePaths als auch unterNamespaces sind nicht festgelegt.
  • Namespacename enthält eingebettete NULL-Zeichen.
  • Namespace ist leer oder NULL , und unternamespaces ist nicht festgelegt.
  • Namespace ist leer oder NULL , und metaDataFilePaths ist festgelegt.

Hinweise

Verwenden Sie die RoResolveNamespace-Funktion, um Windows-Runtime Namespacehierarchien zu untersuchen.

Beispiele

Das folgende C++-Beispiel zeigt, wie Sie die RoResolveNamespace-Funktion verwenden, um die direkten untergeordneten Namespaces für einen angegebenen Typnamen zu finden.

#include <windows.h>
#include <stdio.h>
#include <WinRTString.h>
#include <TypeResolution.h>
#include <atlbase.h>

HRESULT PrintDirectChildrenSubNamespacesAndTypesPaths(PCWSTR pszName);

int ShowUsage()
{
    wprintf(L"Usage: RoResolveNamespaceSample TypeName\n");
    return -1;
}

int __cdecl wmain(int argc, WCHAR **argv)
{
    if (argc != 2)
    {
        return ShowUsage();
    }

    HRESULT hr = PrintDirectChildrenSubNamespacesAndTypesPaths(argv[1]);

    if (SUCCEEDED(hr))
    {
        return 0;
    }
    else
    {
        return -1;
    }
}

HRESULT PrintDirectChildrenSubNamespacesAndTypesPaths(PCWSTR pszName)
{
    HRESULT hr;
    HSTRING hstrName = nullptr;
    DWORD cRetrievedSubNamespaces = 0;
    HSTRING *phstrRetrievedSubNamespaces = nullptr;
    DWORD cRetrievedMetaDataFilePaths = 0;
    HSTRING *phstrRetrievedMetaDataFiles = nullptr;

    hr = WindowsCreateString(
        pszName,
        static_cast<UINT32>(wcslen(pszName)),
        &hstrName);

    if (SUCCEEDED(hr))
    {
        hr = RoResolveNamespace(
            hstrName,
            nullptr,
            0,
            nullptr,
            &cRetrievedMetaDataFilePaths,
            &phstrRetrievedMetaDataFiles,
            &cRetrievedSubNamespaces,
            &phstrRetrievedSubNamespaces);
    }

    if (SUCCEEDED(hr))
    {
        if (cRetrievedSubNamespaces != 0)
        {
            wprintf(L"Direct-children subnamespaces of %s are:\n", pszName);

            for (DWORD i = 0; i < cRetrievedSubNamespaces; i++)
            {
                wprintf(L"Subnamespace %d: %s\n", i, WindowsGetStringRawBuffer(phstrRetrievedSubNamespaces[i], nullptr));
            }
        }

        if (cRetrievedMetaDataFilePaths != 0)
        {
            wprintf(L"Potential direct-children types of %s could be found in:\n", pszName);

            for (DWORD i = 0; i < cRetrievedMetaDataFilePaths; i++)
            {
                wprintf(L"Metadata file path %d: %s\n", i, WindowsGetStringRawBuffer(phstrRetrievedMetaDataFiles[i], nullptr));
            }
        }
    }
    else if (hr == RO_E_METADATA_NAME_NOT_FOUND)
    {
        wprintf(L"Name %s was not found!\n", pszName);
    }
    else
    {
        wprintf(L"Error %x occurred while trying to resolve %s!\n", hr, pszName);
    }

    // Clean up resources.
    if (hstrName != nullptr)
    {
        WindowsDeleteString(hstrName);
    }

    for (DWORD i = 0; i < cRetrievedSubNamespaces; i++)
    {
        WindowsDeleteString(phstrRetrievedSubNamespaces[i]);
    }

    CoTaskMemFree(phstrRetrievedSubNamespaces);

    for (DWORD i = 0; i < cRetrievedMetaDataFilePaths; i++)
    {
        WindowsDeleteString(phstrRetrievedMetaDataFiles[i]);
    }
    
    CoTaskMemFree(phstrRetrievedMetaDataFiles);

    return hr;
}

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 rometadataresolution.h
Bibliothek WinTypes.lib
DLL WinTypes.dll