共用方式為


IDebugExpressionContext2::ParseText

剖析文字格式的表示式以供稍後評估。

語法

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

參數

pszCode
[in]要剖析的表達式。

dwFlags
[in]PARSEFLAGS 列舉中的旗標組合,可控制剖析。

nRadix
[in]要用來剖析 中 pszCode任何數值資訊的基數。

ppExpr
[out]會傳 回代表已剖析表達式的 IDebugExpression2 物件,此表示式已準備好進行系結和評估。

pbstrError
[out]如果表達式包含錯誤,則傳回錯誤訊息。

pichError
[out]如果表示式包含錯誤,則傳回 中 pszCode 錯誤的字元索引。

傳回值

如果成功,則會傳回 S_OK;否則,會傳回錯誤碼。

備註

呼叫此方法時,偵錯引擎 (DE) 應該剖析表達式並驗證其正確性。 pbstrError如果表達式無效,可能會填入 和 pichError 參數。

請注意,不會評估表達式,只會剖析。 稍後呼叫 EvaluateSyncEvaluateAsync 方法會評估剖析的表達式。

範例

下列範例示範如何針對公開IDebugExpressionContext2 介面的簡單CEnvBlock物件實作這個方法。 這個範例會將表達式視為環境變數的名稱,並從該變數擷取值。

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

另請參閱