IDebugExpression2::EvaluateSyncIDebugExpression2::EvaluateSync
Cette méthode évalue l’expression de façon synchrone.This method evaluates the expression synchronously.
SyntaxeSyntax
HRESULT EvaluateSync(
EVALFLAGS dwFlags,
DWORD dwTimeout,
IDebugEventCallback2* pExprCallback,
IDebugProperty2** ppResult
);
int EvaluateSync(
enum_EVALFLAGS dwFlags,
uint dwTimeout,
IDebugEventCallback2 pExprCallback,
out IDebugProperty2 ppResult
);
ParamètresParameters
dwFlags
[in] Une combinaison d’indicateurs à partir de la EVALFLAGS énumération qui contrôlent l’évaluation de l’expression.[in] A combination of flags from the EVALFLAGS enumeration that control expression evaluation.
dwTimeout
[in] Temps maximal, en millisecondes, à attendre avant de retourner à partir de cette méthode.[in] Maximum time, in milliseconds, to wait before returning from this method. Utilisez INFINITE
pour attendre indéfiniment.Use INFINITE
to wait indefinitely.
pExprCallback
[in] Ce paramètre est toujours une valeur null.[in]This parameter is always a null value.
ppResult
[out] Retourne le IDebugProperty2 objet qui contient le résultat de l’évaluation d’expression.[out] Returns the IDebugProperty2 object that contains the result of the expression evaluation.
Valeur de retourReturn Value
En cas de réussite, retourne S_OK
; sinon, retourne un code d’erreur.If successful, returns S_OK
; otherwise returns an error code. Certains codes d’erreur standard sont :Some typical error codes are:
ErrorError | DescriptionDescription |
---|---|
E_EVALUATE_BUSY_WITH_EVALUATIONE_EVALUATE_BUSY_WITH_EVALUATION | Une autre expression est en cours d’évaluation et évaluation d’expression simultanées n’est pas pris en charge.Another expression is currently being evaluated, and simultaneous expression evaluation is not supported. |
E_EVALUATE_TIMEOUTE_EVALUATE_TIMEOUT | Évaluation a expiré.Evaluation timed out. |
NotesRemarks
Pour l’évaluation synchrone, il n’est pas nécessaire envoyer un événement vers Visual Studio à l’achèvement de l’évaluation.For synchronous evaluation, it is not necessary to send an event back to Visual Studio upon completion of the evaluation.
ExempleExample
L’exemple suivant montre comment implémenter cette méthode pour une simple CExpression
objet qui implémente le IDebugExpression2 interface.The following example shows how to implement this method for a simple CExpression
object that implements the IDebugExpression2 interface.
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;
}
Voir aussiSee Also
IDebugExpression2 IDebugExpression2
EVALFLAGS EVALFLAGS
IDebugEventCallback2 IDebugEventCallback2
IDebugProperty2IDebugProperty2