事件來源 (Visual Studio SDK)
如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件。
有兩個來源的事件︰ 偵錯引擎 (DE) 工作階段偵錯和管理員 (SDM)。 從 DE 傳送的事件會有一個非 NULL 引擎,而從 SDM 傳送的事件有 NULL 引擎。
範例
下列範例示範如何傳送IDebugProgramCreateEvent2從 SDM 至 DE。
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;
}