IDebugExpression2::EvaluateSync
Tato metoda vyhodnocuje výraz synchronně.
Syntaxe
int EvaluateSync(
enum_EVALFLAGS dwFlags,
uint dwTimeout,
IDebugEventCallback2 pExprCallback,
out IDebugProperty2 ppResult
);
Parametry
dwFlags
[v] Kombinace příznaků z výčtu EVALFLAGS , která řídí vyhodnocení výrazu.
dwTimeout
[v] Maximální doba, v milisekundách, počkat před vrácením z této metody. Slouží INFINITE
k čekání na neomezenou dobu.
pExprCallback
[v] Tento parametr je vždy hodnotou null.
ppResult
[ven] Vrátí IDebugProperty2 objekt, který obsahuje výsledek vyhodnocení výrazu.
Vrácená hodnota
V případě úspěchu vrátí hodnotu S_OK
; v opačném případě vrátí kód chyby. Mezi typické kódy chyb patří:
Chyba | Popis |
---|---|
E_EVALUATE_BUSY_WITH_EVALUATION | Aktuálně se vyhodnocuje jiný výraz a souběžné vyhodnocení výrazů se nepodporuje. |
E_EVALUATE_TIMEOUT | Časový limit vyhodnocení vypršel. |
Poznámky
Pro synchronní vyhodnocení není nutné po dokončení vyhodnocení odeslat událost zpět do sady Visual Studio.
Příklad
Následující příklad ukazuje, jak implementovat tuto metodu pro jednoduchý CExpression
objekt, který implementuje IDebugExpression2 rozhraní.
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;
}