Condividi tramite


Implementazione dell'esempio di valutazione di espressioni

Per un'espressione della finestra di espressione di controllo , chiamate IDebugExpressionContext2:: ParseText di Visual Studio per IDebugExpression2 produrre un oggetto. IDebugExpressionContext2::ParseText creare un'istanza di un (EE) analizzatore di espressioni e IDebugExpressionEvaluator:: Di traccia chiama per IDebugParsedExpression ottenere un oggetto.

Questa implementazione di IDebugExpressionEvaluator::Parse esegue le attività seguenti:

  1. [C++ solo] analizza l'espressione per individuare gli errori.

  2. Creare un'istanza di una classe (chiamata CParsedExpression in questo esempio) che implementa l'interfaccia e gli archivi di IDebugParsedExpression nella classe l'espressione da analizzare.

  3. Restituisce l'interfaccia di IDebugParsedExpression dall'oggetto di CParsedExpression .

Nota

Negli esempi che seguono e nell'esempio di MyCEE, l'analizzatore di espressioni non consente l'analisi dalla valutazione.

Codice gestito

Si tratta di un'implementazione di IDebugExpressionEvaluator::Parse nel codice gestito. Si noti che questa versione del metodo rinvia tracciatura a IDebugParsedExpression:: EvaluateSync quando il codice per analizzare anche valuta contemporaneamente (vedere Valutazione di un'espressione espressioni di controllo).

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

codice non gestito

Si tratta di un'implementazione di IDebugExpressionEvaluator::Parse nel codice non gestito. Questo metodo chiama una funzione di supporto, Parse, analizzare l'espressione e il controllo degli errori ma questo metodo ignora il valore risultante. La valutazione formale è IDebugParsedExpression:: EvaluateSync rinviata a cui l'espressione viene analizzata mentre viene valutata (vedere Valutazione di un'espressione espressioni di controllo).

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

Vedere anche

Concetti

Valutare l'espressione la finestra Espressioni di controllo

Valutazione di un'espressione espressioni di controllo