共用方式為


IDebugExpression2::EvaluateSync

這個方法會以同步方式評估運算式。

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

參數

  • dwFlags
    [in]從的旗標組合EVALFLAGS控制運算式評估的列舉型別。

  • dwTimeout
    [in]最大時間 (毫秒),從這個方法傳回之前等待。 使用INFINITE無限期地等待。

  • pExprCallback
    [in]這個參數永遠是 null 值。

  • ppResult
    [] out傳回IDebugProperty2物件,其中包含運算式評估的結果。

傳回值

如果成功的話,會傳回S_OK。 否則會傳回錯誤碼。 一些常見的錯誤碼如下:

錯誤

描述

E_EVALUATE_BUSY_WITH_EVALUATION

目前在評估另一個運算式,並不支援同時的運算式評估。

E_EVALUATE_TIMEOUT

評估已經逾時。

備註

對於同步的評估,並不需要將事件傳回完成評估後的 Visual Studio。

範例

下列範例會示範如何實作這個方法,如CExpression實作物件IDebugExpression2介面。

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

請參閱

參考

IDebugExpression2

EVALFLAGS

IDebugEventCallback2

IDebugProperty2