共用方式為


IDebugExpression2::EvaluateSync

 

如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件

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

語法

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