Freigeben über


IDebugExpressionContext2::ParseText

Analysiert einen Ausdruck in Textform für die spätere Auswertung.

Syntax

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-Aufzählung , die die Analyse steuert.

nRadix
[in] Das Radix, das bei der Analyse numerischer Informationen verwendet pszCodewerden soll.

ppExpr
[out] Gibt das IDebugExpression2 -Objekt zurück, das den analysierten Ausdruck darstellt, der für die Bindung und Auswertung bereit ist.

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

pichError
[out] Gibt den Zeichenindex des Fehlers zurück pszCode , 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 ein Debugmodul (DE) den Ausdruck analysieren und auf Richtigkeit überprüfen. Die Parameter und pichError Parameter pbstrError können ausgefüllt werden, wenn der Ausdruck ungültig ist.

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

Beispiel

Das folgende Beispiel zeigt, wie Sie diese Methode für ein einfaches CEnvBlock Objekt implementieren, das die IDebugExpressionContext2-Schnittstelle verfügbar macht. In diesem Beispiel wird der Ausdruck als Name einer Umgebungsvariable 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 successfully 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 successfully 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