Hizkuntza
Oharra
Baimena behar duzu orria atzitzeko. Direktorioetan saioa has dezakezu edo haiek alda ditzakezu.
Baimena behar duzu orria atzitzeko. Direktorioak alda ditzakezu.
Recupera las clases con el atributo especificado en un módulo determinado.
Sintaxis
int GetAttributedClassesinModule (
uint ulAppDomainID,
Guid guidModule,
string pstrAttribute,
out IEnumDebugFields ppEnum
);
Parámetros
ulAppDomainID
[in] Identificador del dominio de aplicación.
guidModule
[in] Identificador único del módulo.
pstrAttribute
[in] Cadena de atributo.
ppEnum
[out] Devuelve una enumeración de las clases con atributos.
Valor devuelto
Si la operación se realiza correctamente, devuelve S_OK; de lo contrario, devuelve un código de error.
Ejemplo
En el ejemplo siguiente se muestra cómo implementar este método para un objeto CDebugSymbolProvider que expone la interfaz IDebugComPlusSymbolProvider .
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;
}