Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ta metoda oblicza wyrażenie synchronicznie.
Składnia
int EvaluateSync(
enum_EVALFLAGS dwFlags,
uint dwTimeout,
IDebugEventCallback2 pExprCallback,
out IDebugProperty2 ppResult
);
Parametry
dwFlags
[in] Kombinacja flag z wyliczenia EVALFLAGS , które kontroluje ocenę wyrażenia.
dwTimeout
[in] Maksymalny czas oczekiwania (w milisekundach) przed powrotem z tej metody. Użyj polecenia INFINITE , aby poczekać na czas nieokreślony.
pExprCallback
[in] Ten parametr jest zawsze wartością null.
ppResult
[out] Zwraca obiekt IDebugProperty2 zawierający wynik oceny wyrażenia.
Wartość zwracana
Jeśli operacja powiedzie się, zwraca wartość S_OK; w przeciwnym razie zwraca kod błędu. Oto niektóre typowe kody błędów:
| Błąd | opis |
|---|---|
| E_EVALUATE_BUSY_WITH_EVALUATION | Obecnie oceniane jest inne wyrażenie, a jednoczesne obliczanie wyrażeń nie jest obsługiwane. |
| E_EVALUATE_TIMEOUT | Przekroczono limit czasu oceny. |
Uwagi
W przypadku oceny synchronicznej nie jest konieczne wysłanie zdarzenia z powrotem do programu Visual Studio po zakończeniu oceny.
Przykład
W poniższym przykładzie pokazano, jak zaimplementować tę metodę dla prostego CExpression obiektu, który implementuje interfejs 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;
}