Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Importante
In Visual Studio 2015 questo modo di implementare gli analizzatori di espressioni è deprecato. Per informazioni sull'implementazione degli analizzatori di espressioni CLR, vedere Esempio di analizzatori di espressioni CLR e analizzatore di espressioni gestite.
Per un'espressione di finestra Espressione di controllo, Visual Studio chiama ParseText per produrre un oggetto IDebugExpression2 . IDebugExpressionContext2::ParseTextcrea un'istanza di un analizzatore di espressioni (edizione Enterprise) e chiama Parse per ottenere un oggetto IDebugParsedExpression.
Esegue IDebugExpressionEvaluator::Parse le attività seguenti:
[solo C++] Analizza l'espressione per cercare gli errori.
Crea un'istanza di una classe (chiamata
CParsedExpressionin questo esempio) che esegue l'interfacciaIDebugParsedExpressione archivia nella classe l'espressione da analizzare.Restituisce l'interfaccia
IDebugParsedExpressiondall'oggettoCParsedExpression.
Nota
Negli esempi seguenti e nell'esempio MyC edizione Enterprise l'analizzatore di espressioni non separa l'analisi dalla valutazione.
Codice gestito
Il codice seguente illustra un'implementazione di IDebugExpressionEvaluator::Parse nel codice gestito. Questa versione del metodo rinvia l'analisi a EvaluateSync come codice per l'analisi valuta contemporaneamente (vedere Valutare un'espressione espressione 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
Il codice seguente è un'implementazione di IDebugExpressionEvaluator::Parse nel codice non gestito. Questo metodo chiama una funzione helper, Parse, per analizzare l'espressione e verificare la presenza di errori, ma questo metodo ignora il valore risultante. La valutazione formale viene posticipata a EvaluateSync in cui l'espressione viene analizzata mentre viene valutata (vedere Evaluate a Watch expression).
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;
}