IDebugComPlusSymbolProvider2::GetTypesByName
擷取指定其名稱的型別。
HRESULT GetTypesByName(
LPCOLESTR pszClassName,
NAME_MATCH nameMatch,
IEnumDebugFields** ppEnum
);
int GetTypesByName(
string pszClassName,
enum_ NAME_MATCH nameMatch,
out IEnumDebugFields ppEnum
);
參數
pszClassName
[in]型別名稱。nameMatch
[in]選取的型別符合的項目,例如,區分大小寫。 NAME_MATCH 列舉中的值。ppEnum
[] out列舉值,其中包含的型別或具有指定名稱的型別。
傳回值
如果成功的話,會傳回S_OK。 否則,會傳回錯誤碼。
備註
對於泛型型別,'清單 <int> ' 或 '列出 < int,int >' 查閱名稱將是 [清單]。 如果相同名稱的型別出現在多個模組, ppEnum參數會包含所有的複本。 您必須使用IDebugField::GetTypeInfo ,並區分根據guidModule參數。
範例
下列範例會示範如何實作這個方法,如 CDebugSymbolProvider 物件,公開 (expose) IDebugComPlusSymbolProvider2介面。
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;
}