origini evento (Visual Studio SDK)
Esistono due origini degli eventi: il motore (DE) di debug e la sessione di debug l'amministratore (SDM). Gli eventi generati da un DE dispongono di un modulo non Null, mentre gli eventi generati da SDM dispongono di un motore NULL.
Esempio
Nell'esempio seguente viene illustrato come inviare IDebugProgramCreateEvent2 da DE a SDM.
CDebugProgramCreateEvent* pProgramCreateEvent = new CDebugProgramCreateEvent();
if (FAILED(pCallback->Event(m_pEngine, NULL, m_pProgram, NULL, pProgramCreateEvent, IID_IDebugProgramCreateEvent2, EVENT_ASYNCHRONOUS)))
{
// Handle failure here.
}
]
CEvent * pProgCreate = new CEvent(IID_IDebugProgramCreateEvent2, EVENT_ASYNCHRONOUS);
pProgCreate->SendEvent(pCallback, m_pEngine, (IDebugProgram2 *)this, NULL);
HRESULT CEvent::SendEvent(IDebugEventCallback2 *pCallback, IDebugEngine2 *pEngine, IDebugProgram2 *pProgram, IDebugThread2 *pThread) {
HRESULT hr;
if (m_dwAttrib & EVENT_STOPPING)
{
hr = SendStoppingEvent(pCallback, pEngine, pProgram, pThread);
}
else if (m_dwAttrib & EVENT_SYNCHRONOUS)
{
hr = SendSynchronousEvent(pCallback, pEngine, pProgram, pThread);
}
else
{
assert(m_dwAttrib == 0);
hr = SendAsynchronousEvent(pCallback, pEngine, pProgram, pThread);
}
return hr;
}
HRESULT CEvent::SendAsynchronousEvent(IDebugEventCallback2 *pCallback, IDebugEngine2 *pEngine, IDebugProgram2 *pProgram, IDebugThread2 *pThread) {
HRESULT hr;
// Make sure the CEvent object running this code is not deleted until the code completes.
AddRef();
pCallback->Event(pEngine, NULL, pProgram, pThread, (IDebugEvent2 *)this, m_riid, m_dwAttrib);
// No error recovery here.
hr = S_OK;
Release();
return hr;
}