Partilhar via


IDebugExpressionContext2::ParseText

Analisa uma expressão na forma de texto para avaliação posterior.

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âmetros

  • pszCode
    [in] A expressão a ser analisado.

  • dwFlags
    [in] Uma combinação de sinalizadores da PARSEFLAGS enumeração que controla a análise.

  • nRadix
    [in] A base para ser usado na análise de qualquer informação numérica em pszCode.

  • ppExpr
    [out] Retorna o IDebugExpression2 o objeto que representa a expressão analisada, o que está pronta para ligação e avaliação.

  • pbstrError
    [out] Retorna a mensagem de erro se a expressão contém um erro.

  • pichError
    [out] Retorna o índice do caractere do erro em pszCode se a expressão contém um erro.

Valor de retorno

Se bem-sucedida, retorna S_OK; Caso contrário, retorna um código de erro.

Comentários

Quando esse método é chamado, um mecanismo de depuração (DE) deve analisar a expressão e validá-lo para a correção. O pbstrError e pichError parâmetros podem ser preenchidos se a expressão for inválida.

Observe que a expressão é avaliada não, apenas analisada. Uma chamada posterior para o IDebugExpression2::EvaluateSync ou IDebugExpression2::EvaluateAsync métodos avalia a expressão analisada.

Exemplo

O exemplo a seguir mostra como implementar este método para um simples CEnvBlock objeto que expõe a IDebugExpressionContext2 interface. Este exemplo considera que a expressão a ser analisada como o nome de uma variável de ambiente e recupera o valor da variável.

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ém

Referência

IDebugExpressionContext2

PARSEFLAGS

IDebugExpression2

IDebugExpression2::EvaluateAsync

IDebugExpression2::EvaluateSync