Freigeben über


IDebugExpressionEvaluator3::Parse2

Konvertiert eine Ausdruckszeichenfolge in einen analysierten Ausdruck, der dem Symbolanbieter und der Adresse des auswertenden Frames zugewiesen ist.

Syntax

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

Parameter

upstrExpression
[in] Die zu analysierende Ausdruckszeichenfolge.

dwFlags
[in] Eine Auflistung von PARSEFLAGS-Konstanten , die bestimmen, wie der Ausdruck analysiert werden soll.

nRadix
[in] Radix wird verwendet, um numerische Informationen zu interpretieren.

pSymbolProvider
[in] Schnittstelle des Symbolanbieters.

pAddress
[in] Adresse des Auswertungsrahmens.

pbstrError
[out] Gibt den Fehler als lesbaren Text zurück.

pichError
[out] Gibt die Zeichenposition des Anfangs des Fehlers in der Ausdruckszeichenfolge zurück.

ppParsedExpression
[out] Gibt den analysierten Ausdruck in einem IDebugParsedExpression -Objekt zurück.

Rückgabewert

Wenn die Ausführung erfolgreich ist, wird S_OK, andernfalls ein Fehlercode zurückgegeben.

Hinweise

Diese Methode erzeugt einen analysierten Ausdruck und keinen tatsächlichen Wert. Ein analysierter Ausdruck kann ausgewertet werden, d. h. in einen Wert konvertiert.

Beispiel

Das folgende Beispiel zeigt, wie Sie diese Methode für ein CEE-Objekt implementieren, das die IDebugExpressionEvaluator3-Schnittstelle verfügbar macht.

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

Siehe auch