Partager via


IDebugExpressionEvaluator3::Parse2

Convertit une chaîne d’expression en expression analysée en fonction du fournisseur de symboles et de l’adresse du cadre d’évaluation.

Syntaxe

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

Paramètres

upstrExpression
[in] Chaîne d’expression à analyser.

dwFlags
[in] Collection de constantes PARSEFLAGS qui déterminent la façon dont l’expression doit être analysée.

nRadix
[in] Radix à utiliser pour interpréter toutes les informations numériques.

pSymbolProvider
[in] Interface du fournisseur de symboles.

pAddress
[in] Adresse du cadre d’évaluation.

pbstrError
[out] Retourne l’erreur en tant que texte lisible par l’homme.

pichError
[out] Retourne la position de caractère du début de l’erreur dans la chaîne d’expression.

ppParsedExpression
[out] Renvoie l’expression analysée dans un objet IDebugParsedExpression .

Valeur de retour

En cas de réussite, retourne S_OK , sinon, retourne un code d'erreur.

Notes

Cette méthode produit une expression analysée, et non une valeur réelle. Une expression analysée est prête à être évaluée, c’est-à-dire convertie en valeur.

Exemple

L’exemple suivant montre comment implémenter cette méthode pour un objet CEE qui expose l’interface IDebugExpressionEvaluator3 .

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

Voir aussi