Aracılığıyla paylaş


IDebugExpression2::EvaluateSync

Bu yöntem, ifadeyi zaman uyumlu olarak değerlendirir.

Sözdizimi

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

Parametreler

dwFlags
[in] EVALFLAGS numaralandırmasından ifade değerlendirmesini denetleen bayrakların birleşimi.

dwTimeout
[in] Bu yöntemden dönmeden önce beklenebilmesi için milisaniye cinsinden en uzun süre. Süresiz beklemek için kullanın INFINITE .

pExprCallback
[in] Bu parametre her zaman null bir değerdir.

ppResult
[out] İfade değerlendirmesinin sonucunu içeren IDebugProperty2 nesnesini döndürür.

İade Değeri

Başarılı olursa döndürür S_OK; aksi takdirde bir hata kodu döndürür. Bazı tipik hata kodları şunlardır:

Hata Açıklama
E_EVALUATE_BUSY_WITH_EVALUATION Şu anda başka bir ifade değerlendiriliyor ve eşzamanlı ifade değerlendirmesi desteklenmiyor.
E_EVALUATE_TIMEOUT Değerlendirme zaman aşımına uğradı.

Açıklamalar

Zaman uyumlu değerlendirme için, değerlendirme tamamlandıktan sonra Visual Studio'ya bir olay göndermek gerekli değildir.

Örnek

Aşağıdaki örnek, IDebugExpression2 arabirimini uygulayan basit CExpression bir nesne için bu yöntemin nasıl uygulandığını gösterir.

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

Ayrıca bkz.