IDebugExpressionEvaluator3::Parse2
Converte uma seqüência de caracteres de expressão em uma expressão analisada, dada o provedor de símbolo e o endereço do quadro avaliar.
HRESULT Parse2 (
LPCOLESTR upstrExpression,
PARSEFLAGS dwFlags,
UINT nRadix,
IDebugSymbolProvider* pSymbolProvider,
IDebugAddress* pAddress,
BSTR* pbstrError,
UINT* pichError,
IDebugParsedExpression** ppParsedExpression
);
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] A seqüência da expressão a ser analisado.dwFlags
[in] Uma coleção de PARSEFLAGS constantes que determinam como a expressão é para ser analisado.nRadix
[in] Base a ser usado para interpretar qualquer informação numérica.pSymbolProvider
[in] Interface do provedor do símbolo.pAddress
[in] Endereço da estrutura de avaliar.pbstrError
[out] Retorna o erro como texto legível.pichError
[out] Retorna a posição do caractere do início do erro na seqüência de expressão.ppParsedExpression
[out] Retorna a expressão analisada em um IDebugParsedExpression objeto.
Valor de retorno
Se bem-sucedida, retorna S_OK; Caso contrário, retorna um código de erro.
Comentários
Este 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 este método para um CEE objeto que expõe a IDebugExpressionEvaluator3 interface.
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);
}