Bagikan melalui


IDebugExpression2::EvaluateSync

Metode ini mengevaluasi ekspresi secara sinkron.

Sintaks

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

Parameter

dwFlags
[di] Kombinasi bendera dari enumerasi EVALFLAGS yang mengontrol evaluasi ekspresi.

dwTimeout
[di] Waktu maksimum, dalam milidetik, untuk menunggu sebelum kembali dari metode ini. Gunakan INFINITE untuk menunggu tanpa batas waktu.

pExprCallback
[di] Parameter ini selalu merupakan nilai null.

ppResult
[out] Mengembalikan objek IDebugProperty2 yang berisi hasil evaluasi ekspresi.

Tampilkan Nilai

Jika berhasil, tampilkan S_OK; jika tidak tampilkan kode galat. Beberapa kode kesalahan umum adalah:

Kesalahan Deskripsi
E_EVALUATE_BUSY_WITH_EVALUATION Ekspresi lain saat ini sedang dievaluasi, dan evaluasi ekspresi simultan tidak didukung.
E_EVALUATE_TIMEOUT Waktu evaluasi habis.

Keterangan

Untuk evaluasi sinkron, tidak perlu mengirim peristiwa kembali ke Visual Studio setelah menyelesaikan evaluasi.

Contoh

Contoh berikut menunjukkan cara menerapkan metode ini untuk objek sederhana CExpression yang mengimplementasikan antarmuka 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;
}

Baca juga