IDebugExpressionEvaluator3::Parse2

Converte uma cadeia de caracteres de expressão em uma expressão analisada, considerando o provedor de símbolos e o endereço do quadro de avaliação.

Sintaxe

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
[em] A cadeia de expressão a ser analisada.

dwFlags
[em] Uma coleção de constantes PARSEFLAGS que determinam como a expressão deve ser analisada.

nRadix
[em] Radix para ser usado para interpretar qualquer informação numérica.

pSymbolProvider
[em] Interface do provedor de símbolos.

pAddress
[em] Endereço do quadro de avaliação.

pbstrError
[saiu] Retorna o erro como texto legível por humanos.

pichError
[saiu] Retorna a posição do caractere do início do erro na cadeia de caracteres de expressão.

ppParsedExpression
[saiu] Retorna a expressão analisada em um objeto IDebugParsedExpression .

Valor de retorno

Se tiver êxito, retornará S_OK. Caso contrário, retornará um código de erro.

Comentários

Esse método produz uma expressão analisada, não um valor real. Uma expressão analisada está pronta para ser avaliada, ou seja, convertida em um valor.

Exemplo

O exemplo a seguir mostra como implementar esse método para um objeto CEE que expõe a interface 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);
}

Confira também