Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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;
}