为 监视 窗口表达式, Visual Studio 会调用 IDebugExpressionContext2:: ParseText 导致 IDebugExpression2 对象。 IDebugExpressionContext2::ParseText 实例化表达式计算器 (EE)并调用 IDebugExpressionEvaluator:: 分析 获取 IDebugParsedExpression 对象。
IDebugExpressionEvaluator::Parse 的此实现执行以下任务:
只有 C++ [] 分析表达式查找错误。
实例化类 (称为在此示例中的 CParsedExpression ) 实现 IDebugParsedExpression 接口和存储类的要分析的表达式。
返回从 CParsedExpression 对象的 IDebugParsedExpression 接口。
备注
在 MyCEE 示例遵循和示例中,表达式计算器从计算不分隔分析。
托管代码
这是 IDebugExpressionEvaluator::Parse 的实现托管代码的。 注意方法此版本的延迟分析为 IDebugParsedExpression:: EvaluateSync ,当分析也的代码同时评估 (请参见 计算监视表达式)。
namespace EEMC
{
public class CParsedExpression : IDebugParsedExpression
{
public HRESULT Parse(
string expression,
uint parseFlags,
uint radix,
out string errorMessage,
out uint errorPosition,
out IDebugParsedExpression parsedExpression)
{
errorMessage = "";
errorPosition = 0;
parsedExpression =
new CParsedExpression(parseFlags, radix, expression);
return COM.S_OK;
}
}
}
非托管代码
这是 IDebugExpressionEvaluator::Parse 的实现在非托管代码中。 此方法调用帮助器函数, Parse,分析表达式和检查错误的,但此方法忽略该结果值。 正式计算推迟到该表达式分析的 IDebugParsedExpression:: EvaluateSync ,则计算时 (请参见 计算监视表达式)。
STDMETHODIMP CExpressionEvaluator::Parse(
in LPCOLESTR pszExpression,
in PARSEFLAGS flags,
in UINT radix,
out BSTR *pbstrErrorMessages,
inout UINT *perrorCount,
out IDebugParsedExpression **ppparsedExpression
)
{
if (pbstrErrorMessages == NULL)
return E_INVALIDARG;
else
*pbstrErrormessages = 0;
if (pparsedExpression == NULL)
return E_INVALIDARG;
else
*pparsedExpression = 0;
if (perrorCount == NULL)
return E_INVALIDARG;
HRESULT hr;
// Look for errors in the expression but ignore results
hr = ::Parse( pszExpression, pbstrErrorMessages );
if (hr != S_OK)
return hr;
CParsedExpression* pparsedExpr = new CParsedExpression( radix, flags, pszExpression );
if (!pparsedExpr)
return E_OUTOFMEMORY;
hr = pparsedExpr->QueryInterface( IID_IDebugParsedExpression,
reinterpret_cast<void**>(ppparsedExpression) );
pparsedExpr->Release();
return hr;
}