IDebugExpressionContext2::ParseText
分析文本形式的表达式以供以后计算。
语法
int ParseText(
string pszCode,
enum_PARSEFLAGS dwFlags,
uint nRadix,
out IDebugExpression2 ppExpr,
out string pbstrError,
out uint pichError
);
参数
pszCode
[in]要分析的表达式。
dwFlags
[in]PAR标准版FLAGS 枚举中控制分析的标志的组合。
nRadix
[in]要用于分析任何数值信息的 pszCode
基数。
ppExpr
[out]返回 表示已分析表达式的 IDebugExpression2 对象,该表达式已准备好进行绑定和计算。
pbstrError
[out]如果表达式包含错误,则返回错误消息。
pichError
[out]如果表达式包含错误,则返回错误的 pszCode
字符索引。
返回值
如果成功,则返回 S_OK
;否则,返回错误代码。
注解
调用此方法时,调试引擎(DE)应分析表达式并验证表达式是否正确。 pbstrError
如果表达式无效,可以填充参数pichError
。
请注意,不计算表达式,仅分析表达式。 稍后对 EvaluateSync 或 EvaluateAsync 方法的调用将计算已分析的表达式。
示例
以下示例演示如何为公开 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;
}