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.
Es gibt zwei Quellen von Ereignissen: das Debugmodul (DE) und den Session Debug Manager (SDM). Ereignisse, die von einem DE gesendet werden, weisen eine Nicht-NULL-Engine auf, während Ereignisse, die vom SDM gesendet werden, über eine NULL-Engine verfügen.
Example
Das folgende Beispiel zeigt, wie das IDebugProgramCreateEvent2 von der DE an das SDM gesendet wird.
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;
}