IDebugExpression2::EvaluateSync
此方法以同步方式计算表达式。
语法
int EvaluateSync(
enum_EVALFLAGS dwFlags,
uint dwTimeout,
IDebugEventCallback2 pExprCallback,
out IDebugProperty2 ppResult
);
参数
dwFlags
[in]控制表达式计算的 EVALFLAGS 枚举中的标志的组合。
dwTimeout
[in]从此方法返回之前要等待的最长时间(以毫秒为单位)。 使用 INFINITE
表示无限期等待。
pExprCallback
[in]此参数始终为 null 值。
ppResult
[out]返回 包含表达式计算结果的 IDebugProperty2 对象。
返回值
如果成功,则返回 S_OK
;否则,返回错误代码。 一些典型的错误代码如下:
错误 | 说明 |
---|---|
E_EVALUATE_BUSY_WITH_EVALUATION | 当前正在计算另一个表达式,不支持同时计算表达式。 |
E_EVALUATE_TIMEOUT | 评估超时。 |
备注
对于同步评估,在评估完成后,不需要将事件发送回 Visual Studio。
示例
以下示例演示如何为实现 IDebugExpression2 接口的简单CExpression
对象实现此方法。
HRESULT CExpression::EvaluateSync(EVALFLAGS dwFlags,
DWORD dwTimeout,
IDebugEventCallback2* pExprCallback,
IDebugProperty2** ppResult)
{
// Set the aborted state to FALSE.
m_bAborted = FALSE;
// Delegate the evaluation to EvalExpression.
return EvalExpression(TRUE, ppResult);
}
HRESULT CExpression::EvalExpression(BOOL bSynchronous,
IDebugProperty2** ppResult)
{
HRESULT hr;
// Get the value of an environment variable.
PCSTR pszVal = m_pEnvBlock->GetEnv(m_pszVarName);
// Create and initialize a CEnvVar object with the retrieved value.
// CEnvVar implements the IDebugProperty2 interface.
CComObject<CEnvVar> *pEnvVar;
CComObject<CEnvVar>::CreateInstance(&pEnvVar);
pEnvVar->Init(m_pszVarName, pszVal, m_pDoc);
if (pszVal) {
// Check for synchronous evaluation.
if (bSynchronous) {
// Set and AddRef the result, IDebugProperty2 interface.
*ppResult = pEnvVar;
(*ppResult)->AddRef();
hr = S_OK;
} else {
//For asynchronous evaluation, send an evaluation complete event.
CExprEvalEvent *pExprEvent = new CExprEvalEvent(this, pEnvVar);
pExprEvent->SendEvent(m_pExprCallback, NULL, NULL, NULL);
}
} else {
// If a valid value is not retrieved, return E_FAIL.
hr = E_FAIL;
}
return hr;
}