IDebugExpression2::EvaluateSync
이 메서드는 동기적으로 계산 수 있습니다.
HRESULT EvaluateSync(
EVALFLAGS dwFlags,
DWORD dwTimeout,
IDebugEventCallback2* pExprCallback,
IDebugProperty2** ppResult
);
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;
}