IDebugExpression2::EvaluateSyncIDebugExpression2::EvaluateSync

Esse método avalia a expressão de forma síncrona.This method evaluates the expression synchronously.

SintaxeSyntax

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] Uma combinação de sinalizadores do EVALFLAGS enumeração que controlam a avaliação da expressão.[in] A combination of flags from the EVALFLAGS enumeration that control expression evaluation.

dwTimeout
[in] Tempo máximo, em milissegundos, para aguardar antes de retornar do método.[in] Maximum time, in milliseconds, to wait before returning from this method. Use INFINITE para aguardar indefinidamente.Use INFINITE to wait indefinitely.

pExprCallback
[in] Esse parâmetro é sempre um valor nulo.[in]This parameter is always a null value.

ppResult
[out] Retorna o IDebugProperty2 objeto que contém o resultado da avaliação da expressão.[out] Returns the IDebugProperty2 object that contains the result of the expression evaluation.

Valor de retornoReturn Value

Se for bem-sucedido, retornará S_OK; caso contrário, retornará um código de erro.If successful, returns S_OK; otherwise returns an error code. Alguns códigos de erro típicos são:Some typical error codes are:

ErroError DescriçãoDescription
E_EVALUATE_BUSY_WITH_EVALUATIONE_EVALUATE_BUSY_WITH_EVALUATION Outra expressão está sendo avaliada no momento, e não há suporte para a avaliação da expressão simultâneas.Another expression is currently being evaluated, and simultaneous expression evaluation is not supported.
E_EVALUATE_TIMEOUTE_EVALUATE_TIMEOUT Avaliação atingiu o tempo limite.Evaluation timed out.

ComentáriosRemarks

Para avaliação síncrona, não é necessário enviar um evento retorne ao Visual Studio após a conclusão da avaliação.For synchronous evaluation, it is not necessary to send an event back to Visual Studio upon completion of the evaluation.

ExemploExample

O exemplo a seguir mostra como implementar esse método para um simples CExpression objeto que implementa o 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;
}

Consulte tambémSee also