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