IDebugPendingBreakpoint2:: CanBind

确定此挂起的断点是否可以绑定到代码位置。

HRESULT CanBind ( 
   IEnumDebugErrorBreakpoints2** ppErrorEnum
);
int CanBind ( 
   out IEnumDebugErrorBreakpoints2 ppErrorEnum
);

参数

返回值

如果成功,则返回 S_OK.返回 S_FALSE ,如果断点不能绑定,,在错误。 ppErrorEnum 参数情况下返回。 否则,返回错误代码。 ,如果断点删除,返回 E_BP_DELETED 。

备注

此方法调用来确定发生什么,则此挂起的断点绑定。 调用 IDebugPendingBreakpoint2:: 绑定 方法实际绑定挂起的断点。

示例

下面的示例演示如何执行显示 IDebugPendingBreakpoint2 接口的简单 CPendingBreakpoint 对象的方法。

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

IDebugPendingBreakpoint2:: 绑定