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] 用于分析在 pszCode的任意数字信息基数。

  • ppExpr
    [out] 返回表示分析的表达式,准备好绑定和计算的 IDebugExpression2 对象。

  • pbstrError
    [out] ,如果表达式包含错误,返回错误消息。

  • pichError
    [out] ,如果表达式包含错误,返回错误的字符索引。 pszCode 的。

返回值

如果成功,则返回; S_OK否则,返回错误代码。

备注

当调用此方法时,调试引擎 (DE)应分析表达式并验证它的有效性。 ,如果表达式无效, pbstrError 和 pichError 参数可以填充。

注意该表达式不会计算,因此,只有分析。 稍后对 IDebugExpression2:: EvaluateSyncIDebugExpression2:: EvaluateAsync 方法计算已分析的表达式。

示例

下面的示例演示如何执行显示 IDebugExpressionContext2 接口的简单 CEnvBlock 对象的方法。 此示例考虑表达式分析为环境变量的名称并从该变量检索值。

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