IDebugExpression2::EvaluateSync

Diese Methode wertet den Ausdruck synchron aus.

Syntax

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

Parameter

dwFlags
[in] Eine Kombination von Flags aus der EVALFLAGS-Aufzählung , die die Auswertung von Ausdrücken steuert.

dwTimeout
[in] Maximale Zeit in Millisekunden, bis sie von dieser Methode zurückgegeben wird. Verwenden Sie INFINITE, um unbegrenzt zu warten.

pExprCallback
[in] Dieser Parameter ist immer ein Nullwert.

ppResult
[out] Gibt das IDebugProperty2 -Objekt zurück, das das Ergebnis der Ausdrucksauswertung enthält.

Rückgabewert

Wenn die Ausführung erfolgreich ist, wird S_OK zurückgegeben, andernfalls ein Fehlercode. Einige typische Fehlercodes sind:

Error Beschreibung
E_EVALUATE_BUSY_WITH_EVALUATION Ein anderer Ausdruck wird derzeit ausgewertet, und die gleichzeitige Ausdrucksauswertung wird nicht unterstützt.
E_EVALUATE_TIMEOUT Timeout der Auswertung.

Hinweise

Bei synchroner Auswertung ist es nicht erforderlich, ein Ereignis nach Abschluss der Auswertung an Visual Studio zurückzusenden.

Beispiel

Das folgende Beispiel zeigt, wie Sie diese Methode für ein einfaches CExpression Objekt implementieren, das die IDebugExpression2-Schnittstelle implementiert.

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

Siehe auch