Compartir a través de


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);
}

Consulte también