IDebugExpression2::EvaluateSyncIDebugExpression2::EvaluateSync

Este método evalúa la expresión de forma sincrónica.This method evaluates the expression synchronously.

SintaxisSyntax

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

ParámetrosParameters

dwFlags
[in] Una combinación de marcas de la EVALFLAGS enumeración que controlan la evaluación de expresiones.[in] A combination of flags from the EVALFLAGS enumeration that control expression evaluation.

dwTimeout
[in] Tiempo máximo, en milisegundos para esperar antes de volver de este método.[in] Maximum time, in milliseconds, to wait before returning from this method. Use INFINITE para esperar indefinidamente.Use INFINITE to wait indefinitely.

pExprCallback
[in] Este parámetro siempre es un valor null.[in]This parameter is always a null value.

ppResult
[out] Devuelve el IDebugProperty2 objeto que contiene el resultado de la evaluación de expresiones.[out] Returns the IDebugProperty2 object that contains the result of the expression evaluation.

Valor devueltoReturn Value

Si es correcto, devuelve S_OK; en caso contrario, devuelve un código de error.If successful, returns S_OK; otherwise returns an error code. Algunos códigos de error típicos son:Some typical error codes are:

ErrorError DescripciónDescription
E_EVALUATE_BUSY_WITH_EVALUATIONE_EVALUATE_BUSY_WITH_EVALUATION Se está evaluando la otra expresión, y no se admite la evaluación de expresión simultáneas.Another expression is currently being evaluated, and simultaneous expression evaluation is not supported.
E_EVALUATE_TIMEOUTE_EVALUATE_TIMEOUT Evaluación de tiempo de espera.Evaluation timed out.

ComentariosRemarks

Para la evaluación sincrónica, no es necesario enviar un evento a Visual Studio tras la finalización de la evaluación.For synchronous evaluation, it is not necessary to send an event back to Visual Studio upon completion of the evaluation.

EjemploExample

El ejemplo siguiente muestra cómo implementar este método para una sencilla CExpression objeto que implementa el IDebugExpression2 interfaz.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;
}

Vea tambiénSee also