Freigeben über


Ausdrucksauswertung zur Implementierung des Beispiels

Bei einem Fenster Überwachen Ausdruck ruft Visual Studio IDebugExpressionContext2::ParseText auf, um ein IDebugExpression2-Objekt zu erstellen. IDebugExpressionContext2::ParseText instanziiert einen Ausdrucksauswertung (EE) und ruft IDebugExpressionEvaluator::Analyse auf, um ein IDebugParsedExpression-Objekt.

Diese Implementierung von IDebugExpressionEvaluator::Parse führt die folgenden Aufgaben aus:

  1. [C++] Es den Ausdruck analysiert, um nach Fehlern zu suchen.

  2. Instanziiert eine Klasse in diesem Beispiel CParsedExpression () implementiert die IDebugParsedExpression und speichert Schnittstelle in der Klasse den zu analysierenden Ausdruck.

  3. Gibt die IDebugParsedExpression-Schnittstelle aus dem CParsedExpression-Objekt zurück.

Hinweis

In den Beispielen und in das MyCEE-Beispiel folgen, trennt die Ausdrucksauswertung die Analyse nicht aus der Auswertung.

Verwalteter Code

Dies ist eine Implementierung von IDebugExpressionEvaluator::Parse in verwaltetem Code. Beachten Sie, dass diese Version der Methode die Analyse zu IDebugParsedExpression::EvaluateSync verzögert, während der Code für die Analyse auch gleichzeitig ausgewertet wird (siehe Auswerten eines Überwachungs-Ausdruck).

namespace EEMC
{
    public class CParsedExpression : IDebugParsedExpression
    {
        public HRESULT Parse(
                string                 expression, 
                uint                   parseFlags,
                uint                   radix,
            out string                 errorMessage, 
            out uint                   errorPosition, 
            out IDebugParsedExpression parsedExpression)
        { 
            errorMessage = "";
            errorPosition = 0;

            parsedExpression =
                new CParsedExpression(parseFlags, radix, expression);
            return COM.S_OK;
        }
    }
}

Nicht verwalteter Code

Dies ist eine Implementierung von IDebugExpressionEvaluator::Parse in nicht verwaltetem Code. Diese Methode ruft eine Hilfsfunktion, Parseignoriert, und der Ausdruck jedoch Fehler für die Überprüfung dieser Methode analysiert den Ergebniswert. Die formale Auswertung wird auf IDebugParsedExpression::EvaluateSync verzögert, in dem der Ausdruck analysiert wird, während er ausgewertet wird (siehe Auswerten eines Überwachungs-Ausdruck).

STDMETHODIMP CExpressionEvaluator::Parse(
        in    LPCOLESTR                 pszExpression,
        in    PARSEFLAGS                flags,
        in    UINT                      radix,
        out   BSTR                     *pbstrErrorMessages,
        inout UINT                     *perrorCount,
        out   IDebugParsedExpression  **ppparsedExpression
    )
{
    if (pbstrErrorMessages == NULL)
        return E_INVALIDARG;
    else
        *pbstrErrormessages = 0;

    if (pparsedExpression == NULL)
        return E_INVALIDARG;
    else
        *pparsedExpression = 0;

    if (perrorCount == NULL)
        return E_INVALIDARG;

    HRESULT hr;
    // Look for errors in the expression but ignore results
    hr = ::Parse( pszExpression, pbstrErrorMessages );
    if (hr != S_OK)
        return hr;

    CParsedExpression* pparsedExpr = new CParsedExpression( radix, flags, pszExpression );
    if (!pparsedExpr)
        return E_OUTOFMEMORY;

    hr = pparsedExpr->QueryInterface( IID_IDebugParsedExpression,
                                      reinterpret_cast<void**>(ppparsedExpression) );
    pparsedExpr->Release();

    return hr;
}

Siehe auch

Konzepte

Auswerten eines Überwachungsfenster-Ausdruck

Auswerten eines Überwachungs-Ausdruck