IDebugComPlusSymbolProvider2:: LoadSymbolsFromStreamWithCorModule
I simboli di debug del caricamento da un flusso di dati fornito il ICorDebugModule oggetto.
HRESULT LoadSymbolsFromStreamWithCorModule(
ULONG32 ulAppDomainID,
GUID guidModule,
ULONGLONG baseAddress,
IUnknown* pUnkMetadataImport,
IUnknown* pUnkCorDebugModule,
IStream* pStream
);
int LoadSymbolsFromStreamWithCorModule(
uint ulAppDomainID,
Guid guidModule,
ulong baseAddress,
object pUnkMetadataImport,
object pUnkCorDebugModule,
IStream pStream
);
Parametri
ulAppDomainID
[in] Identificatore del dominio applicazione.guidModule
[in] Identificatore univoco del modulo.baseAddress
[in] indirizzo di memoria di base.pUnkMetadataImport
[in] Oggetto che contiene i metadati del simbolo.pUnkCorDebugModule
[in] Oggetto che implementa Interfaccia ICorDebugModule.pStream
[in] Flusso di dati che contiene i simboli di debug da caricare.
Valore restituito
Se l'operazione riesce, restituisce S_OK; in caso contrario, restituisce un codice di errore.
Esempio
Nell'esempio seguente viene illustrato come implementare questo metodo per un oggetto di CDebugSymbolProvider che espone IDebugComPlusSymbolProvider2 l'interfaccia.
HRESULT CDebugSymbolProvider::LoadSymbolsFromStreamWithCorModule(
ULONG32 ulAppDomainID,
GUID guidModule,
ULONGLONG baseOffset,
IUnknown* pUnkMetadataImport,
IUnknown* pUnkCorDebugModule,
IStream* pStream
)
{
CAutoLock Lock(this);
HRESULT hr = S_OK;
CComPtr<IMetaDataImport> pMetadata;
CComPtr<ICorDebugModule> pCorModule;
CModule* pmodule = NULL;
CModule* pmoduleNew = NULL;
bool fAlreadyLoaded = false;
Module_ID idModule(ulAppDomainID, guidModule);
DWORD dwCurrentState = 0;
ASSERT(IsValidObjectPtr(this, CDebugSymbolProvider));
ASSERT(IsValidInterfacePtr(pUnkMetadataImport, IUnknown));
METHOD_ENTRY( CDebugSymbolProvider::LoadSymbolsFromStream );
IfFalseGo( pUnkMetadataImport, E_INVALIDARG );
IfFalseGo( pUnkCorDebugModule, E_INVALIDARG );
IfFailGo( pUnkMetadataImport->QueryInterface( IID_IMetaDataImport,
(void**)&pMetadata) );
IfFailGo( pUnkCorDebugModule->QueryInterface( IID_ICorDebugModule,
(void**)&pCorModule) );
ASSERT(guidModule != GUID_NULL);
fAlreadyLoaded = GetModule( idModule, &pmodule ) == S_OK;
IfNullGo( pmoduleNew = new CModule, E_OUTOFMEMORY );
dwCurrentState = m_pSymProvGroup ? m_pSymProvGroup->GetCurrentState() : 0;
IfFailGo( pmoduleNew->Create( idModule,
dwCurrentState,
pMetadata,
pCorModule,
pStream,
baseOffset ) );
if (fAlreadyLoaded)
{
IfFailGo(pmoduleNew->AddEquivalentModulesFrom(pmodule));
RemoveModule(pmodule);
}
IfFailGo( AddModule( pmoduleNew ) );
Error:
RELEASE (pmodule);
RELEASE (pmoduleNew);
METHOD_EXIT( CDebugSymbolProvider::LoadSymbolsFromStream, hr );
return hr;
}