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 после завершения оценки.
Пример
В следующем примере показано, как реализовать этот метод для простого CExpression
объекта, реализующего интерфейс IDebugExpression2 .
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;
}