IDebugExpressionContext2::ParseText

Analysiert einen Ausdruck zur späteren Auswertung in Textform.

Syntax

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

Parameter

pszCode
[in] Der zu analysierende Ausdruck.

dwFlags
[in] Eine Kombination von Flags aus der PARSEFLAGS-Enumeration, die die Analyse steuert.

nRadix
[in] Das Radix, das beim Analysieren beliebiger numerischer Informationen in verwendet werden pszCode soll.

ppExpr
[out] Gibt das IDebugExpression2-Objekt zurück, das den analysierten Ausdruck darstellt, der für bindungs- und auswertungsbereit ist.

pbstrError
[out] Gibt die Fehlermeldung zurück, wenn der Ausdruck einen Fehler enthält.

pichError
[out] Gibt den Zeichenindex des Fehlers in pszCode zurück, wenn der Ausdruck einen Fehler enthält.

Rückgabewert

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

Hinweise

Wenn diese Methode aufgerufen wird, sollte eine Debug-Engine (DE) den Ausdruck analysieren und auf Richtigkeit überprüfen. Die pbstrError Parameter und können ausgefüllt pichError werden, wenn der Ausdruck ungültig ist.

Beachten Sie, dass der Ausdruck nicht ausgewertet, sondern nur analysiert wird. Ein späterer Aufruf der EvaluateSync- oder EvaluateAsync-Methode wertet den analysierten Ausdruck aus.

Beispiel

Das folgende Beispiel zeigt, wie diese Methode für ein CEnvBlock einfaches -Objekt implementiert wird, das die IDebugExpressionContext2-Schnittstelle verfügbar macht. In diesem Beispiel wird der Ausdruck als Name einer Umgebungsvariablen analysiert und der Wert aus dieser Variablen abgerufen.

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

Siehe auch