Поделиться через


IDebugExpressionContext2::ParseText

Анализирует выражение в текстовой форме для последующего вычисления.

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

Параметры

  • pszCode
    [in] выражение, которое необходимо проанализировать.

  • dwFlags
    [in] сочетание пометит из PARSEFLAGS перечисление этот анализ элементов управления.

  • nRadix
    [in] корневой элемент, который необходимо использовать в анализе все данные в numeric pszCode.

  • ppExpr
    [out] возвращает IDebugExpression2 объект, представляющий проанализированное выражение, которое готово для привязки и evaluation.

  • pbstrError
    [out] возвращает сообщение об ошибке, если выражение содержит ошибку.

  • pichError
    [out] возвращает индекс символа ошибки in pszCode если выражение содержит ошибку.

Возвращаемое значение

В случае успеха возвращает S_OK; в противном случае возвращает код ошибки.

Заметки

Если этот метод вызывается обработчик отладки (DE) должен выполнить синтаксический анализ выражения и проверить его на правильность. pbstrError и pichError параметры могут быть заполняются если выражение является недопустимым.

Обратите внимание, что выражение не вычисляется только анализируется. Более последний вызов IDebugExpression2::EvaluateSync OR IDebugExpression2::EvaluateAsync методы принимают проанализированное выражение.

Пример

В следующем примере показано, как реализовать этот метод для простого CEnvBlock объект, предоставляющий IDebugExpressionContext2 интерфейс. Этот пример проверяет, что выражение анализируется как имя переменной среды, и извлекает значение из этой переменной.

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

См. также

Ссылки

IDebugExpressionContext2

PARSEFLAGS

IDebugExpression2

IDebugExpression2::EvaluateAsync

IDebugExpression2::EvaluateSync