IDebugExpressionContext2::ParseTextIDebugExpressionContext2::ParseText

Analiza una expresión en forma de texto para evaluarlos posteriormente.Parses an expression in text form for later evaluation.

SintaxisSyntax

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

ParámetrosParameters

pszCode
[in] La expresión que se puede analizar.[in] The expression to be parsed.

dwFlags
[in] Una combinación de marcas de la PARSEFLAGS enumeración que controla el análisis.[in] A combination of flags from the PARSEFLAGS enumeration that controls parsing.

nRadix
[in] La base que se usará al analizar cualquier información numérica en pszCode.[in] The radix to be used in parsing any numerical information in pszCode.

ppExpr
[out] Devuelve el IDebugExpression2 objeto que representa la expresión analizada, que está lista para enlace y evaluación.[out] Returns the IDebugExpression2 object that represents the parsed expression, which is ready for binding and evaluation.

pbstrError
[out] Devuelve el mensaje de error si la expresión contiene un error.[out] Returns the error message if the expression contains an error.

pichError
[out] Devuelve el índice de carácter del error en pszCode si la expresión contiene un error.[out] Returns the character index of the error in pszCode if the expression contains an error.

Valor devueltoReturn Value

Si es correcto, devuelve S_OK; en caso contrario, devuelve un código de error.If successful, returns S_OK; otherwise, returns an error code.

ComentariosRemarks

Cuando se llama a este método, un motor de depuración (DE) debe analizar la expresión y validarlo son correctos.When this method is called, a debug engine (DE) should parse the expression and validate it for correctness. El pbstrError y pichError parámetros no se pueden rellenar si la expresión no es válida.The pbstrError and pichError parameters may be filled in if the expression is invalid.

Tenga en cuenta que no se evalúa la expresión, solo puede analizar.Note that the expression is not evaluated, only parsed. Una llamada posterior a la EvaluateSync o EvaluateAsync métodos evalúa la expresión analizada.A later call to the EvaluateSync or EvaluateAsync methods evaluates the parsed expression.

EjemploExample

El ejemplo siguiente muestra cómo implementar este método para una sencilla CEnvBlock objeto que expone el IDebugExpressionContext2 interfaz.The following example shows how to implement this method for a simple CEnvBlock object that exposes the IDebugExpressionContext2 interface. En este ejemplo se considera que la expresión que se puede analizar como el nombre de una variable de entorno y se recupera el valor de esa variable.This example considers the expression to be parsed as the name of an environment variable and retrieves the value from that variable.

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

Vea tambiénSee also