다음을 통해 공유


IDebugExpression2::EvaluateSync

이 메서드는 식을 동시에 계산합니다.

구문

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

매개 변수

dwFlags
[in] 식 계산을 제어하는 EVALFLAGS 열거형의 플래그 조합입니다.

dwTimeout
[in] 이 메서드에서 반환되기 전에 대기하는 최대 시간(밀리초)입니다. 무한정 기다리려면 INFINITE을 사용합니다.

pExprCallback
[in] 이 매개 변수는 항상 null 값입니다.

ppResult
[out] 식 계산 결과를 포함하는 IDebugProperty2 개체를 반환합니다.

Return Value

성공하면 S_OK를 반환하고, 그러지 않으면 오류 코드를 반환합니다. 몇 가지 일반적인 오류 코드는 다음과 같습니다.

오류 설명
E_EVALUATE_BUSY_WITH_EVALUATION 현재 다른 식이 계산되고 있으며 동시 식 계산은 지원되지 않습니다.
E_EVALUATE_TIMEOUT 계산 시간이 초과되었습니다.

설명

동시 계산의 경우 계산이 완료되면 이벤트를 다시 Visual Studio로 보낼 필요가 없습니다.

예시

다음 예제에서는 IDebugExpression2인터페이스를 구현하는 간단한 CExpression 개체에 대해 이 메서드를 구현하는 방법을 보여 줍니다.

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

참고 항목