IDebugExpressionEvaluator3::Parse2
Convierte una cadena de expresión en una expresión analizada según el proveedor de símbolos y la dirección del marco de evaluación.
Sintaxis
HRESULT Parse2 (
string upstrExpression,
enum_PARSEFLAGS dwFlags,
uint nRadix,
IDebugSymbolProvider pSymbolProvider,
IDebugAddress pAddress,
out string pbstrError,
out uint pichError,
out IDebugParsedExpression ppParsedExpression
);
Parámetros
upstrExpression
[in] Cadena de expresión que se va a analizar.
dwFlags
[in] Colección de constantes PARSEFLAGS que determinan cómo se va a analizar la expresión.
nRadix
[in] Radix que se usará para interpretar cualquier información numérica.
pSymbolProvider
[in] Interfaz del proveedor de símbolos.
pAddress
[in] Dirección del marco de evaluación.
pbstrError
[out] Devuelve el error como texto legible.
pichError
[out] Devuelve la posición del carácter del inicio del error en la cadena de expresión.
ppParsedExpression
[out] Devuelve la expresión analizada en un objeto IDebugParsedExpression .
Valor devuelto
Si la operación se realiza correctamente, devuelve S_OK
; de lo contrario, devuelve un código de error.
Comentarios
Este método genera una expresión analizada, no un valor real. Una expresión analizada está lista para evaluarse, es decir, convertida en un valor.
Ejemplo
En el ejemplo siguiente se muestra cómo implementar este método para un objeto CEE que expone la interfaz IDebugExpressionEvaluator3 .
HRESULT CEE::Parse2 ( LPCOLESTR in_szExprText,
PARSEFLAGS in_FLAGS,
UINT in_RADIX,
IDebugSymbolProvider *pSymbolProvider,
IDebugAddress *pAddress,
BSTR* out_pbstrError,
UINT* inout_pichError,
IDebugParsedExpression** out_ppParsedExpression )
{
// precondition
REQUIRE( NULL != in_szExprText );
//REQUIRE( NULL != out_pbstrError );
REQUIRE( NULL != inout_pichError );
REQUIRE( NULL != out_ppParsedExpression );
if (NULL == in_szExprText)
return E_INVALIDARG;
if (NULL == inout_pichError)
return E_POINTER;
if (NULL == out_ppParsedExpression)
return E_POINTER;
if (out_pbstrError)
*out_pbstrError = NULL;
*out_ppParsedExpression = NULL;
INVARIANT( this );
if (!this->ClassInvariant())
return E_UNEXPECTED;
// function body
EEDomain::fParseExpression DomainVal =
{
this, // CEE*
in_szExprText, // LPCOLESTR
in_FLAGS, // EVALFLAGS
in_RADIX, // RADIX
out_pbstrError, // BSTR*
inout_pichError, // UINT*
pSymbolProvider,
out_ppParsedExpression // Output
};
return (*m_LanguageSpecificUseCases.pfParseExpression)(DomainVal);
}