次の方法で共有


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
[入力] 解析する式の文字列。

dwFlags
[入力] 式の解析方法を決定する PARSEFLAGS 定数のコレクション。

nRadix
[入力] 数値情報を解釈するために使用される基数。

pSymbolProvider
[入力] シンボル プロバイダーのインターフェイス。

pAddress
[入力] 評価フレームのアドレス。

pbstrError
[出力] エラーを人間が判読できるテキストとして返します。

pichError
[出力] 式の文字列内のエラーの先頭の文字位置を返します。

ppParsedExpression
[出力] 解析された式を IDebugParsedExpression オブジェクトで返します。

戻り値

成功した場合は、S_OK を返します。それ以外の場合は、エラー コードを返します。

解説

このメソッドでは、実際の値ではなく、解析された式が生成されます。 解析された式を評価する (つまり、値に変換する) 準備ができました。

次の例は、IDebugExpressionEvaluator3 インターフェイスを公開する CEE オブジェクトに対してこのメソッドを実装する方法を示しています。

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

関連項目