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:
[C++] Es den Ausdruck analysiert, um nach Fehlern zu suchen.
Instanziiert eine Klasse in diesem Beispiel CParsedExpression () implementiert die IDebugParsedExpression und speichert Schnittstelle in der Klasse den zu analysierenden Ausdruck.
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;
}