Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Importante
En Visual Studio 2015, esta forma de implementar evaluadores de expresiones está en desuso. Para obtener información sobre cómo implementar evaluadores de expresiones CLR, vea Evaluadores de expresiones CLR y Ejemplo de evaluador de expresiones administradas.
Para una expresión de la ventana Inspección, Visual Studio llama a ParseText a fin de generar un objeto IDebugExpression2. IDebugExpressionContext2::ParseText crea una instancia de un evaluador de expresiones (EE) y llama a Parse para obtener un objeto IDebugParsedExpression.
IDebugExpressionEvaluator::Parse realiza las tareas siguientes:
[Solo C++] Analiza la expresión para buscar errores.
Crea una instancia de una clase (denominada
CParsedExpressionen este ejemplo) que ejecuta la interfazIDebugParsedExpressiony almacena en la clase la expresión que se va a analizar.Devuelve la interfaz
IDebugParsedExpressiondesde el objetoCParsedExpression.
Nota:
En los ejemplos siguientes y en el de MyCEE, el evaluador de expresiones no separa el análisis de la evaluación.
Código administrado
En el código siguiente se muestra una implementación de IDebugExpressionEvaluator::Parse en código administrado. Esta versión del método difiere el análisis a EvaluateSync, ya que el código para analizar también se evalúa al mismo tiempo (vea Evaluación de una expresión de Inspección).
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;
}
}
}
Código no administrado
El código siguiente es una implementación de IDebugExpressionEvaluator::Parse en código no administrado. Este método llama a una función auxiliar, Parse, para analizar la expresión y comprobar si hay errores, pero este método omite el valor resultante. La evaluación formal se difiere a EvaluateSync, donde se analiza la expresión mientras se evalúa (vea Evaluación de una expresión de inspección).
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;
}