IDebugExpressionContext2::ParseTextIDebugExpressionContext2::ParseText

Analisa uma expressão na forma de texto para avaliação posterior.Parses an expression in text form for later evaluation.

SintaxeSyntax

HRESULT ParseText(   
   LPCOLESTR           pszCode,  
   PARSEFLAGS          dwFlags,  
   UINT                nRadix,  
   IDebugExpression2** ppExpr,  
   BSTR*               pbstrError,  
   UINT*               pichError  
);  
int ParseText(   
   string                pszCode,  
   enum_PARSEFLAGS       dwFlags,  
   uint                  nRadix,  
   out IDebugExpression2 ppExpr,  
   out string            pbstrError,  
   out uint              pichError  
);  

ParâmetrosParameters

pszCode
[in] A expressão a ser analisado.[in] The expression to be parsed.

dwFlags
[in] Uma combinação de sinalizadores do PARSEFLAGS enumeração que controla a análise.[in] A combination of flags from the PARSEFLAGS enumeration that controls parsing.

nRadix
[in] A base a ser usado na análise de todas as informações numéricas em pszCode.[in] The radix to be used in parsing any numerical information in pszCode.

ppExpr
[out] Retorna o IDebugExpression2 objeto que representa a expressão analisada, que está pronta para vinculação e avaliação.[out] Returns the IDebugExpression2 object that represents the parsed expression, which is ready for binding and evaluation.

pbstrError
[out] Retorna a mensagem de erro se a expressão contiver um erro.[out] Returns the error message if the expression contains an error.

pichError
[out] Retorna o índice de caracteres do erro no pszCode se a expressão contiver um erro.[out] Returns the character index of the error in pszCode if the expression contains an error.

Valor de retornoReturn Value

Se for bem-sucedido, retornará S_OK; caso contrário, retorna um código de erro.If successful, returns S_OK; otherwise, returns an error code.

ComentáriosRemarks

Quando este método é chamado, um mecanismo de depuração (DES) deve analisar a expressão e validá-lo quanto à correção.When this method is called, a debug engine (DE) should parse the expression and validate it for correctness. O pbstrError e pichError parâmetros podem ser preenchidos se a expressão é inválida.The pbstrError and pichError parameters may be filled in if the expression is invalid.

Observe que a expressão é avaliada não, apenas analisado.Note that the expression is not evaluated, only parsed. Uma chamada posterior para o EvaluateSync ou EvaluateAsync métodos avalia a expressão analisada.A later call to the EvaluateSync or EvaluateAsync methods evaluates the parsed expression.

ExemploExample

O exemplo a seguir mostra como implementar esse método para um simples CEnvBlock objeto que expõe o IDebugExpressionContext2 interface.The following example shows how to implement this method for a simple CEnvBlock object that exposes the IDebugExpressionContext2 interface. Este exemplo considera que a expressão a ser analisado como o nome de uma variável de ambiente e recupera o valor dessa variável.This example considers the expression to be parsed as the name of an environment variable and retrieves the value from that variable.

HRESULT CEnvBlock::ParseText(  
   LPCOLESTR           pszCode,  
   PARSEFLAGS          dwFlags,  
   UINT                nRadix,  
   IDebugExpression2 **ppExpr,  
   BSTR               *pbstrError,  
   UINT               *pichError)  
{  
   HRESULT hr = E_OUTOFMEMORY;    
   // Create an integer variable with a value equal to one plus    
   // twice the length of the passed expression to be parsed.    
   int iAnsiLen      = 2 * (wcslen(pszCode)) + 1;    
   // Allocate a character string of the same length.    
   char *pszAnsiCode = (char *) malloc(iAnsiLen);    
  
   // Check for successful memory allocation.    
   if (pszAnsiCode) {    
      // Map the wide-character pszCode string to the new pszAnsiCode character string.    
      WideCharToMultiByte(CP_ACP, 0, pszCode, -1, pszAnsiCode, iAnsiLen, NULL, NULL);    
      // Check to see if the app can succesfully get the environment variable.    
      if (GetEnv(pszAnsiCode)) {    
  
         // Create and initialize a CExpression object.    
         CComObject<CExpression> *pExpr;    
         CComObject<CExpression>::CreateInstance(&pExpr);    
            pExpr->Init(pszAnsiCode, this, NULL);    
  
         // Assign the pointer to the new object to the passed argument  
         // and AddRef the object.    
         *ppExpr = pExpr;    
         (*ppExpr)->AddRef();    
         hr = S_OK;    
      // If the program cannot succesfully get the environment variable.    
      } else {    
         // Set the errror message and return E_FAIL.    
         *pbstrError = SysAllocString(L"No such environment variable.");    
         hr = E_FAIL;    
      }    
      // Free the local character string.    
      free(pszAnsiCode);    
   }    
   return hr;    
}    

Consulte tambémSee Also

IDebugExpressionContext2 IDebugExpressionContext2
PARSEFLAGS PARSEFLAGS
IDebugExpression2 IDebugExpression2
EvaluateAsync EvaluateAsync
EvaluateSyncEvaluateSync