IDebugExpression2::EvaluateSync

このメソッドは、式を同期的に評価します。

構文

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

パラメーター

dwFlags
[入力] 式の評価を制御する EVALFLAGS 列挙型のフラグの組み合わせ。

dwTimeout
[入力] このメソッドから戻る前に待機する最大時間 (ミリ秒単位)。 待機時間を指定しない場合は INFINITE を使用します。

pExprCallback
[入力] このパラメーターは常に null 値です。

ppResult
[出力] 式の評価結果を格納している 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;
}

関連項目