다음을 통해 공유


IDebugComPlusSymbolProvider2::GetTypesByName

이름이 지정된 경우 형식을 검색합니다.

구문

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

매개 변수

pszClassName
[in] 형식의 이름입니다.

nameMatch
[in] 일치 유형(예: 대/소문자 구분)을 선택합니다. NAME_MATCH 열거형의 값입니다.

ppEnum
[out] 지정된 이름의 형식을 포함하는 열거자입니다.

Return Value

성공하면 S_OK를 반환하고, 실패하면 오류 코드를 반환합니다.

설명

제네릭 형식의 경우 'List<int>' 또는 'List<int,int>'를 조회할 이름은 'List'입니다. 동일한 이름의 형식이 여러 모듈에 표시되면 ppEnum 매개 변수에 모든 복사본이 포함됩니다. GetTypeInfo를 사용하고 guidModule 매개 변수를 기준으로 구별해야 합니다.

예시

다음 예제에서는 IDebugComPlusSymbolProvider2 인터페이스를 노출하는 CDebugSymbolProvider 개체에 대해 이 메서드를 구현하는 방법을 보여 줍니다.

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

참고 항목