Freigeben über


IDebugComPlusSymbolProvider2::GetTypesByName

Ruft einen Typ mit seinem Namen ab.

Syntax

int GetTypesByName(
    string               pszClassName,
    enum_ NAME_MATCH     nameMatch,
    out IEnumDebugFields ppEnum
);

Parameter

pszClassName
[in] Name des Typs.

nameMatch
[in] Wählt den Übereinstimmungstyp aus, z. B. bei Groß-/Kleinschreibung. Ein Wert aus der NAME_MATCH-Aufzählung .

ppEnum
[out] Ein Enumerator, der den Typ oder die Typen mit dem angegebenen Namen enthält.

Rückgabewert

Wenn die Ausführung erfolgreich ist, wird S_OK, andernfalls ein Fehlercode zurückgegeben.

Hinweise

Bei generischen Typen wäre der Name, der nach "List<int>" oder "List<int>" gesucht werden soll, "List". Wenn Typen desselben Namens in mehreren Modulen angezeigt werden, enthält der ppEnum Parameter alle Kopien. Sie müssen GetTypeInfo verwenden und basierend auf dem guidModule Parameter unterscheiden.

Beispiel

Das folgende Beispiel zeigt, wie Sie diese Methode für ein CDebugSymbolProvider -Objekt implementieren, das die IDebugComPlusSymbolProvider2-Schnittstelle verfügbar macht.

HRESULT CDebugSymbolProvider::GetTypesByName(
    LPCOLESTR pszClassName,
    NAME_MATCH nameMatch,
    IEnumDebugFields** ppEnum
)
{
    HRESULT hr = S_OK;
    CModIter ModIter;
    CModule* pmodule; // the iterator owns the reference
    CFieldList listField;

    ASSERT(IsValidWideStringPtr(pszClassName));
    ASSERT(IsValidWritePtr(ppEnum, IEnumDebugFields*));

    METHOD_ENTRY( CDebugSymbolProvider::GetTypesByName );

    IfFalseGo( pszClassName && ppEnum, E_INVALIDARG );
    *ppEnum = NULL;

    IfFailGo( GetModuleIter(&ModIter) );

    hr = S_FALSE;

    if ( nameMatch == nmCaseInsensitive)
    {
        while (ModIter.GetNext(&pmodule))
        {
            if (pmodule->FindTypesByNameCaseInsensitive( pszClassName,
                    &listField,
                    this ) )
            {
                hr = S_OK;
            }
        }
    }
    else
    {
        while (ModIter.GetNext(&pmodule))
        {
            if (pmodule->FindTypesByName( pszClassName,
                                          &listField,
                                          this) )
            {
                hr = S_OK;
            }
        }
    }

    // If the list is empty then no type
    IfFalseGo( listField.GetCount(), E_FAIL );

    // Create enumerator
    IfFailGo( CreateEnumerator( ppEnum, &listField ) );

Error:

    METHOD_EXIT( CDebugSymbolProvider::GetTypesByName, hr );

    return hr;
}

Siehe auch