Condividi tramite


IDebugPendingBreakpoint2:: CanBind

Determina se questo punto di interruzione corrente può essere associato a un percorso di codice.

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

Parametri

Valore restituito

Se l'operazione riesce, il S_OK.restituisce S_FALSE se il punto di interruzione non può essere associato, nel qual caso di errore restituiti dal parametro di ppErrorEnum . In caso contrario, restituisce un codice di errore. Restituisce E_BP_DELETED se il punto di interruzione è stato eliminato.

Note

Questo metodo viene chiamato per determinare che si verificherebbe se questo punto di interruzione corrente è stato associato. Effettivamente IDebugPendingBreakpoint2:: associazione chiamato il metodo per associare il punto di interruzione in attesa.

Esempio

Nell'esempio seguente viene illustrato come implementare questo metodo per un oggetto semplice di CPendingBreakpoint che espone IDebugPendingBreakpoint2 l'interfaccia.

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;  
}  

Vedere anche

Riferimenti

IDebugPendingBreakpoint2

IEnumDebugErrorBreakpoints2

IDebugErrorBreakpoint2

IDebugPendingBreakpoint2:: associazione