Hizkuntza
Oharra
Baimena behar duzu orria atzitzeko. Direktorioetan saioa has dezakezu edo haiek alda ditzakezu.
Baimena behar duzu orria atzitzeko. Direktorioak alda ditzakezu.
Este método evalúa la expresión de forma sincrónica.
Sintaxis
int EvaluateSync(
enum_EVALFLAGS dwFlags,
uint dwTimeout,
IDebugEventCallback2 pExprCallback,
out IDebugProperty2 ppResult
);
Parámetros
dwFlags
[in] Combinación de marcas de la enumeración EVALFLAGS que controla la evaluación de expresiones.
dwTimeout
[in] Tiempo máximo, en milisegundos, para esperar antes de volver de este método. Use INFINITE para esperar indefinidamente.
pExprCallback
[in] Este parámetro siempre es un valor NULL.
ppResult
[out] Devuelve el objeto IDebugProperty2 que contiene el resultado de la evaluación de expresiones.
Valor devuelto
Si la operación se realiza correctamente, devuelve S_OK; de lo contrario, devuelve un código de error. Algunos códigos de error típicos son:
| Error | Descripción |
|---|---|
| E_EVALUATE_BUSY_WITH_EVALUATION | Actualmente no se admite otra expresión y no se admite la evaluación de expresiones simultáneas. |
| E_EVALUATE_TIMEOUT | Se agota el tiempo de espera de evaluación. |
Comentarios
Para la evaluación sincrónica, no es necesario devolver un evento a Visual Studio tras la finalización de la evaluación.
Ejemplo
En el ejemplo siguiente se muestra cómo implementar este método para un objeto simple CExpression que implementa la interfaz 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;
}