Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Důležité
V sadě Visual Studio 2015 je tento způsob implementace vyhodnocovačů výrazů zastaralý. Informace o implementaci vyhodnocovačů výrazů CLR najdete v tématu vyhodnocovače výrazů CLR a ukázka vyhodnocovače spravovaných výrazů.
Pro výraz okna kukátka Visual Studio volá ParseText k vytvoření IDebugExpression2 objektu. IDebugExpressionContext2::ParseText
vytvoří instanci vyhodnocovače výrazu (EE) a volání Parse získat IDebugParsedExpression objektu.
Provede IDebugExpressionEvaluator::Parse
následující úlohy:
[Pouze C++] Parsuje výraz tak, aby vyhledá chyby.
Vytvoří instanci třídy (volané
CParsedExpression
v tomto příkladu), která spouštíIDebugParsedExpression
rozhraní a ukládá ve třídě výraz, který se má analyzovat.IDebugParsedExpression
Vrátí rozhraní z objektuCParsedExpression
.
Poznámka:
V příkladech, které následují a v ukázce MyCEE, vyhodnocení výrazu neodděluje analýzu od vyhodnocení.
Spravovaný kód
Následující kód ukazuje implementaci spravovaného IDebugExpressionEvaluator::Parse
kódu. Tato verze metody vymění parsování na EvaluateSync jako kód pro parsování se také vyhodnotí současně (viz Vyhodnocení výrazu watch).
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;
}
}
}
Nespravovaný kód
Následující kód je implementace IDebugExpressionEvaluator::Parse
v nespravovaném kódu. Tato metoda volá pomocnou funkci , Parse
parsovat výraz a kontrolovat chyby, ale tato metoda ignoruje výslednou hodnotu. Formální vyhodnocení je odloženo na EvaluateSync , kde se výraz parsuje při vyhodnocování (viz Vyhodnocení výrazu watch).
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;
}