Sdílet prostřednictvím


IDebugExpression2::EvaluateSync

Tato metoda vyhodnocuje výraz synchronně.

Syntaxe

int EvaluateSync(
    enum_EVALFLAGS       dwFlags,
    uint                 dwTimeout,
    IDebugEventCallback2 pExprCallback,
    out IDebugProperty2  ppResult
);

Parametry

dwFlags
[v] Kombinace příznaků z výčtu EVALFLAGS , která řídí vyhodnocení výrazu.

dwTimeout
[v] Maximální doba, v milisekundách, počkat před vrácením z této metody. Slouží INFINITE k čekání na neomezenou dobu.

pExprCallback
[v] Tento parametr je vždy hodnotou null.

ppResult
[ven] Vrátí IDebugProperty2 objekt, který obsahuje výsledek vyhodnocení výrazu.

Vrácená hodnota

V případě úspěchu vrátí hodnotu S_OK; v opačném případě vrátí kód chyby. Mezi typické kódy chyb patří:

Chyba Popis
E_EVALUATE_BUSY_WITH_EVALUATION Aktuálně se vyhodnocuje jiný výraz a souběžné vyhodnocení výrazů se nepodporuje.
E_EVALUATE_TIMEOUT Časový limit vyhodnocení vypršel.

Poznámky

Pro synchronní vyhodnocení není nutné po dokončení vyhodnocení odeslat událost zpět do sady Visual Studio.

Příklad

Následující příklad ukazuje, jak implementovat tuto metodu pro jednoduchý CExpression objekt, který implementuje IDebugExpression2 rozhraní.

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

Viz také