IDebugExpressionContext2::ParseText

Analyse une expression sous forme de texte pour une évaluation ultérieure.

Syntaxe

int ParseText(
    string                pszCode,
    enum_PARSEFLAGS       dwFlags,
    uint                  nRadix,
    out IDebugExpression2 ppExpr,
    out string            pbstrError,
    out uint              pichError
);

Paramètres

pszCode
[in] Expression à analyser.

dwFlags
[in] Combinaison d’indicateurs de l’énumération PARSEFLAGS qui contrôle l’analyse.

nRadix
[in] Radix à utiliser pour analyser toutes les informations numériques en pszCode.

ppExpr
[out] Renvoie l’objet IDebugExpression2 qui représente l’expression analysée, qui est prête pour la liaison et l’évaluation.

pbstrError
[out] Retourne le message d’erreur si l’expression contient une erreur.

pichError
[out] Retourne l’index de caractère de l’erreur dans pszCode lequel l’expression contient une erreur.

Valeur de retour

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

Notes

Lorsque cette méthode est appelée, un moteur de débogage (DE) doit analyser l’expression et la valider pour la correction. Les pbstrError paramètres et pichError les paramètres peuvent être renseignés si l’expression n’est pas valide.

Notez que l’expression n’est pas évaluée, uniquement analysée. Un appel ultérieur aux méthodes EvaluateSync ou EvaluateAsync évalue l’expression analysée.

Exemple

L’exemple suivant montre comment implémenter cette méthode pour un objet simple CEnvBlock qui expose l’interface IDebugExpressionContext2 . Cet exemple considère que l’expression doit être analysée comme le nom d’une variable d’environnement et récupère la valeur de cette 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 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;
}

Voir aussi