Aracılığıyla paylaş


IDebugExpressionContext2::ParseText

Bir ifadeyi daha sonra değerlendirme için metin biçiminde ayrıştırıyor.

Sözdizimi

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

Parametreler

pszCode
[in] Ayrıştırılacak ifade.

dwFlags
[in] AYRıştırma denetimindeki PARSEFLAGS sabit listesi bayraklarının birleşimi.

nRadix
[in] içindeki sayısal bilgileri pszCodeayrıştırmada kullanılacak radix.

ppExpr
[out] Bağlama ve değerlendirme için hazır olan ayrıştırılmış ifadeyi temsil eden IDebugExpression2 nesnesini döndürür.

pbstrError
[out] İfade bir hata içeriyorsa hata iletisini döndürür.

pichError
[out] İfade bir hata içeriyorsa içindeki pszCode hatanın karakter dizinini döndürür.

İade Değeri

Başarılı olursa döndürür S_OK; aksi takdirde bir hata kodu döndürür.

Açıklamalar

Bu yöntem çağrıldığında, bir hata ayıklama altyapısı (DE) ifadeyi ayrıştırmalı ve doğru olup olmadığını doğrulamalıdır. pbstrError İfade geçersizse ve pichError parametreleri doldurulabilir.

İfadenin değerlendirilmediğini, yalnızca ayrıştırıldığını unutmayın. EvaluateSync veya EvaluateAsync yöntemlerine yapılan sonraki bir çağrı, ayrıştırılan ifadeyi değerlendirir.

Örnek

Aşağıdaki örnek, IDebugExpressionContext2 arabirimini kullanıma sunan basit CEnvBlock bir nesne için bu yöntemin nasıl uygulandığını gösterir. Bu örnek, bir ortam değişkeninin adı olarak ayrıştırılacak ifadeyi dikkate alır ve değeri bu değişkenden alır.

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 error message and return E_FAIL.
            *pbstrError = SysAllocString(L"No such environment variable.");
            hr = E_FAIL;
        }
        // Free the local character string.
        free(pszAnsiCode);
    }
    return hr;
}

Ayrıca bkz.