IDebugExpression2::EvaluateSyncIDebugExpression2::EvaluateSync

Cette méthode évalue l’expression de façon synchrone.This method evaluates the expression synchronously.

SyntaxeSyntax

HRESULT EvaluateSync(   
   EVALFLAGS             dwFlags,  
   DWORD                 dwTimeout,  
   IDebugEventCallback2* pExprCallback,  
   IDebugProperty2**     ppResult  
);  
int EvaluateSync(  
   enum_EVALFLAGS       dwFlags,   
   uint                 dwTimeout,   
   IDebugEventCallback2 pExprCallback,   
   out IDebugProperty2  ppResult  
);  

ParamètresParameters

dwFlags
[in] Une combinaison d’indicateurs à partir de la EVALFLAGS énumération qui contrôlent l’évaluation de l’expression.[in] A combination of flags from the EVALFLAGS enumeration that control expression evaluation.

dwTimeout
[in] Temps maximal, en millisecondes, à attendre avant de retourner à partir de cette méthode.[in] Maximum time, in milliseconds, to wait before returning from this method. Utilisez INFINITE pour attendre indéfiniment.Use INFINITE to wait indefinitely.

pExprCallback
[in] Ce paramètre est toujours une valeur null.[in]This parameter is always a null value.

ppResult
[out] Retourne le IDebugProperty2 objet qui contient le résultat de l’évaluation d’expression.[out] Returns the IDebugProperty2 object that contains the result of the expression evaluation.

Valeur de retourReturn Value

En cas de réussite, retourne S_OK; sinon, retourne un code d’erreur.If successful, returns S_OK; otherwise returns an error code. Certains codes d’erreur standard sont :Some typical error codes are:

ErrorError DescriptionDescription
E_EVALUATE_BUSY_WITH_EVALUATIONE_EVALUATE_BUSY_WITH_EVALUATION Une autre expression est en cours d’évaluation et évaluation d’expression simultanées n’est pas pris en charge.Another expression is currently being evaluated, and simultaneous expression evaluation is not supported.
E_EVALUATE_TIMEOUTE_EVALUATE_TIMEOUT Évaluation a expiré.Evaluation timed out.

NotesRemarks

Pour l’évaluation synchrone, il n’est pas nécessaire envoyer un événement vers Visual Studio à l’achèvement de l’évaluation.For synchronous evaluation, it is not necessary to send an event back to Visual Studio upon completion of the evaluation.

ExempleExample

L’exemple suivant montre comment implémenter cette méthode pour une simple CExpression objet qui implémente le IDebugExpression2 interface.The following example shows how to implement this method for a simple CExpression object that implements the IDebugExpression2 interface.

HRESULT CExpression::EvaluateSync(EVALFLAGS dwFlags,  
                                  DWORD dwTimeout,  
                                  IDebugEventCallback2* pExprCallback,  
                                  IDebugProperty2** ppResult)  
{  
    // Set the aborted state to FALSE.    
    m_bAborted = FALSE;    
    // Delegate the evaluation to EvalExpression.    
    return EvalExpression(TRUE, ppResult);    
}  

HRESULT CExpression::EvalExpression(BOOL bSynchronous,  
                                    IDebugProperty2** ppResult)  
{  
    HRESULT hr;  

    // Get the value of an environment variable.  
    PCSTR pszVal = m_pEnvBlock->GetEnv(m_pszVarName);  
    // Create and initialize a CEnvVar object with the retrieved value.  
    // CEnvVar implements the IDebugProperty2 interface.  
    CComObject<CEnvVar> *pEnvVar;  
    CComObject<CEnvVar>::CreateInstance(&pEnvVar);  
    pEnvVar->Init(m_pszVarName, pszVal, m_pDoc);  

    if (pszVal) {  
        // Check for synchronous evaluation.  
        if (bSynchronous) {  
            // Set and AddRef the result, IDebugProperty2 interface.  
            *ppResult = pEnvVar;  
            (*ppResult)->AddRef();  
            hr = S_OK;  
        } else {  
            //For asynchronous evaluation, send an evaluation complete event.  
            CExprEvalEvent *pExprEvent = new CExprEvalEvent(this, pEnvVar);  
            pExprEvent->SendEvent(m_pExprCallback, NULL, NULL, NULL);  
        }  
    } else {  
        // If a valid value is not retrieved, return E_FAIL.  
        hr = E_FAIL;  
    }  
    return hr;  
}  

Voir aussiSee Also

IDebugExpression2 IDebugExpression2
EVALFLAGS EVALFLAGS
IDebugEventCallback2 IDebugEventCallback2
IDebugProperty2IDebugProperty2