IDebugExpression2::EvaluateSync
Diese Methode wertet den Ausdruck synchron aus.
Syntax
int EvaluateSync(
enum_EVALFLAGS dwFlags,
uint dwTimeout,
IDebugEventCallback2 pExprCallback,
out IDebugProperty2 ppResult
);
Parameter
dwFlags
[in] Eine Kombination von Flags aus der EVALFLAGS-Aufzählung , die die Auswertung von Ausdrücken steuert.
dwTimeout
[in] Maximale Zeit in Millisekunden, bis sie von dieser Methode zurückgegeben wird. Verwenden Sie INFINITE
, um unbegrenzt zu warten.
pExprCallback
[in] Dieser Parameter ist immer ein Nullwert.
ppResult
[out] Gibt das IDebugProperty2 -Objekt zurück, das das Ergebnis der Ausdrucksauswertung enthält.
Rückgabewert
Wenn die Ausführung erfolgreich ist, wird S_OK
zurückgegeben, andernfalls ein Fehlercode. Einige typische Fehlercodes sind:
Error | Beschreibung |
---|---|
E_EVALUATE_BUSY_WITH_EVALUATION | Ein anderer Ausdruck wird derzeit ausgewertet, und die gleichzeitige Ausdrucksauswertung wird nicht unterstützt. |
E_EVALUATE_TIMEOUT | Timeout der Auswertung. |
Hinweise
Bei synchroner Auswertung ist es nicht erforderlich, ein Ereignis nach Abschluss der Auswertung an Visual Studio zurückzusenden.
Beispiel
Das folgende Beispiel zeigt, wie Sie diese Methode für ein einfaches CExpression
Objekt implementieren, das die IDebugExpression2-Schnittstelle implementiert.
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;
}