共用方式為


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 物件。

傳回值

如果成功,則會傳回 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;
}

另請參閱