Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Metode ini mengevaluasi ekspresi secara sinkron.
Sintaks
int EvaluateSync(
enum_EVALFLAGS dwFlags,
uint dwTimeout,
IDebugEventCallback2 pExprCallback,
out IDebugProperty2 ppResult
);
Parameter
dwFlags
[di] Kombinasi bendera dari enumerasi EVALFLAGS yang mengontrol evaluasi ekspresi.
dwTimeout
[di] Waktu maksimum, dalam milidetik, untuk menunggu sebelum kembali dari metode ini. Gunakan INFINITE untuk menunggu tanpa batas waktu.
pExprCallback
[di] Parameter ini selalu merupakan nilai null.
ppResult
[out] Mengembalikan objek IDebugProperty2 yang berisi hasil evaluasi ekspresi.
Tampilkan Nilai
Jika berhasil, tampilkan S_OK; jika tidak tampilkan kode galat. Beberapa kode kesalahan umum adalah:
| Kesalahan | Deskripsi |
|---|---|
| E_EVALUATE_BUSY_WITH_EVALUATION | Ekspresi lain saat ini sedang dievaluasi, dan evaluasi ekspresi simultan tidak didukung. |
| E_EVALUATE_TIMEOUT | Waktu evaluasi habis. |
Keterangan
Untuk evaluasi sinkron, tidak perlu mengirim peristiwa kembali ke Visual Studio setelah menyelesaikan evaluasi.
Contoh
Contoh berikut menunjukkan cara menerapkan metode ini untuk objek sederhana CExpression yang mengimplementasikan antarmuka 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;
}