IDebugPendingBreakpoint2::CanBind
如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件。
決定此暫止中斷點可以繫結到程式碼的位置。
語法
HRESULT CanBind (
IEnumDebugErrorBreakpoints2** ppErrorEnum
);
int CanBind (
out IEnumDebugErrorBreakpoints2 ppErrorEnum
);
參數
ppErrorEnum
[out]傳回IEnumDebugErrorBreakpoints2物件,其中包含一份IDebugErrorBreakpoint2物件如果可能有錯誤。
傳回值
如果成功,傳回S_OK.
傳回S_FALSE
中斷點無法繫結,如果在此情況下會傳回錯誤的ppErrorEnum
參數。 反之則傳回錯誤碼。 傳回E_BP_DELETED
若已刪除中斷點。
備註
這個方法會呼叫來決定會發生什麼事如果這暫止中斷點繫結。 呼叫繫結方法實際繫結暫止中斷點。
範例
下列範例示範如何實作這種簡單的方式CPendingBreakpoint
公開物件IDebugPendingBreakpoint2介面。
HRESULT CPendingBreakpoint::CanBind(IEnumDebugErrorBreakpoints2** ppErrorEnum)
{
HRESULT hr;
HRESULT hrT;
// Check for a valid pointer to an error breakpoint enumerator
// interface; otherwise, return hr = E_INVALIDARG.
if (ppErrorEnum)
{
// Verify that the pending breakpoint has not been deleted. If
// deleted, then return hr = E_BP_DELETED.
if (m_state.state != PBPS_DELETED)
{
// Verify that the breakpoint is a file/line breakpoint.
if (IsFlagSet(m_pBPRequest->m_bpRequestInfo.dwFields, BPREQI_BPLOCATION) &&
m_pBPRequest->m_bpRequestInfo.bpLocation.bpLocationType == BPLT_CODE_FILE_LINE)
{
hr = S_OK;
}
// If the breakpoint type is not a file/line breakpoint, then the
// result should be an error breakpoint.
else
{
// If the error breakpoint member variable does not have
// allocated memory.
if (!m_pErrorBP)
{
// Create, AddRef, and initialize a CErrorBreakpoint object.
if (CComObject<CErrorBreakpoint>::CreateInstance(&m_pErrorBP) == S_OK)
{
m_pErrorBP->AddRef();
m_pErrorBP->Initialize(this);
}
}
// Create a new enumerator of error breakpoints.
CComObject<CEnumDebugErrorBreakpoints>* pErrorEnum;
if (CComObject<CEnumDebugErrorBreakpoints>::CreateInstance(&pErrorEnum) == S_OK)
{
// Get the IDebugErrorBreakpoint2 information for the
// CErrorBreakpoint object.
CComPtr<IDebugErrorBreakpoint2> spErrorBP;
hrT = m_pErrorBP->QueryInterface(&spErrorBP);
assert(hrT == S_OK);
if (hrT == S_OK)
{
// Initialize the new enumerator of error breakpoints
// with the IDebugErrorBreakpoint2 information.
IDebugErrorBreakpoint2* rgpErrorBP[] = { spErrorBP.p };
hrT = pErrorEnum->Init(rgpErrorBP, &(rgpErrorBP[1]), NULL, AtlFlagCopy);
if (hrT == S_OK)
{
// Verify that the passed IEnumDebugErrorBreakpoints2
// interface can be successful queried by the
// created CEnumDebugErrorBreakpoints object.
hrT = pErrorEnum->QueryInterface(ppErrorEnum);
assert(hrT == S_OK);
}
}
// Otherwise, delete the CEnumDebugErrorBreakpoints object.
if (FAILED(hrT))
{
delete pErrorEnum;
}
}
hr = S_FALSE;
}
}
else
{
hr = E_BP_DELETED;
}
}
else
{
hr = E_INVALIDARG;
}
return hr;
}
另請參閱
IDebugPendingBreakpoint2
IEnumDebugErrorBreakpoints2
IDebugErrorBreakpoint2
繫結