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 die Klassen mit dem angegebenen Attribut in einem bestimmten Modul ab.
Syntax
int GetAttributedClassesinModule (
uint ulAppDomainID,
Guid guidModule,
string pstrAttribute,
out IEnumDebugFields ppEnum
);
Parameter
ulAppDomainID
[in] Bezeichner der Anwendung Standard.
guidModule
[in] Eindeutiger Bezeichner des Moduls.
pstrAttribute
[in] Die Attributzeichenfolge.
ppEnum
[out] Gibt eine Aufzählung der attributten Klassen zurück.
Rückgabewert
Wenn die Ausführung erfolgreich ist, wird S_OK, andernfalls ein Fehlercode zurückgegeben.
Beispiel
Das folgende Beispiel zeigt, wie Sie diese Methode für ein CDebugSymbolProvider -Objekt implementieren, das die IDebugComPlusSymbolProvider-Schnittstelle verfügbar macht.
HRESULT CDebugSymbolProvider::GetAttributedClassesinModule(
ULONG32 ulAppDomainID,
GUID guidModule,
__in_z LPOLESTR pstrAttribute,
IEnumDebugFields** ppEnum
)
{
HRESULT hr = S_OK;
CComPtr<CModule> pModule;
CComPtr<IMetaDataImport> pMetaData;
Module_ID idModule(ulAppDomainID, guidModule);
const void* pUnused;
ULONG cbUnused;
HCORENUM hEnum = 0;
ULONG cTypeDefs = 0;
ULONG cEnum;
DWORD iTypeDef = 0;
mdTypeDef* rgTypeDefs = NULL;
IDebugField** rgFields = NULL;
DWORD ctField = 0;
CEnumDebugFields* pEnumFields = NULL;
METHOD_ENTRY( CDebugSymbolProvider::GetAttributedClassesinModule );
IfFalseGo( pstrAttribute && ppEnum , E_INVALIDARG );
IfFailGo( GetModule( idModule, &pModule ) );
pModule->GetMetaData( &pMetaData );
IfFailGo( pMetaData->EnumTypeDefs( &hEnum,
NULL,
0,
&cTypeDefs ) );
IfFailGo( pMetaData->CountEnum( hEnum, &cEnum ) );
pMetaData->CloseEnum(hEnum);
hEnum = NULL;
IfNullGo( rgTypeDefs = new mdTypeDef[cEnum], E_OUTOFMEMORY );
IfNullGo( rgFields = new IDebugField * [cEnum], E_OUTOFMEMORY );
IfFailGo( pMetaData->EnumTypeDefs( &hEnum,
rgTypeDefs,
cEnum,
&cTypeDefs ) );
for ( iTypeDef = 0; iTypeDef < cTypeDefs; iTypeDef++)
{
if (pMetaData->GetCustomAttributeByName( rgTypeDefs[iTypeDef],
pstrAttribute,
&pUnused,
&cbUnused ) == S_OK)
{
if (CreateClassType( idModule, rgTypeDefs[iTypeDef], rgFields + ctField) == S_OK)
{
ctField++;
}
else
{
ASSERT(!"Failed to Create Attributed Class");
}
}
}
IfNullGo( pEnumFields = new CEnumDebugFields, E_OUTOFMEMORY );
IfFailGo( pEnumFields->Initialize(rgFields, ctField) );
IfFailGo( pEnumFields->QueryInterface( __uuidof(IEnumDebugFields),
(void**) ppEnum ) );
Error:
METHOD_EXIT( CDebugSymbolProvider::GetAttributedClassesinModule, hr );
DELETERG( rgTypeDefs );
for ( iTypeDef = 0; iTypeDef < ctField; iTypeDef++)
{
RELEASE( rgFields[iTypeDef] );
}
DELETERG( rgFields );
RELEASE( pEnumFields );
return hr;
}