IDebugExpression2::EvaluateSync
如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件。
這個方法會以同步方式評估運算式。
語法
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;
}
另請參閱
IDebugExpression2
EVALFLAGS
IDebugEventCallback2
IDebugProperty2