IDebugExpressionEvaluator3::Parse2

给定符号提供程序和计算帧的地址,将表达式字符串转换为已分析的表达式。

语法

HRESULT Parse2 (
    string                     upstrExpression,
    enum_PARSEFLAGS            dwFlags,
    uint                       nRadix,
    IDebugSymbolProvider       pSymbolProvider,
    IDebugAddress              pAddress,
    out string                 pbstrError,
    out uint                   pichError,
    out IDebugParsedExpression ppParsedExpression
);

参数

upstrExpression
[in]要分析的表达式字符串。

dwFlags
[in]PAR标准版FLAGS 常量集合,用于确定如何分析表达式。

nRadix
[in]用于解释任何数值信息的弧度。

pSymbolProvider
[in]符号提供程序的接口。

pAddress
[in]评估帧的地址。

pbstrError
[out]将错误作为人工可读文本返回。

pichError
[out]返回表达式字符串中错误开头的字符位置。

ppParsedExpression
[out]返回 IDebugParsedExpression 对象中的已分析表达式。

返回值

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

备注

此方法生成分析的表达式,而不是实际值。 已分析的表达式已准备好计算,即转换为值。

示例

以下示例演示如何为公开 IDebugExpressionEvaluator3 接口的 C企业版 对象实现此方法。

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

另请参阅