運算式評估的實作範例
對於監看式視窗運算式、 Visual Studio 的呼叫IDebugExpressionContext2::ParseText來產生IDebugExpression2物件。 IDebugExpressionContext2::ParseText具現化的運算式評估工具 (EE) 和呼叫IDebugExpressionEvaluator::Parse以取得IDebugParsedExpression物件。
這項實作的IDebugExpressionEvaluator::Parse可以執行下列工作:
[只有 c + +]剖析的運算式,以找出錯誤。
具現化類別 (稱為CParsedExpression在本例中) 實作IDebugParsedExpression介面,並且在類別中,將儲存要剖析的運算式。
傳回IDebugParsedExpression介面從CParsedExpression物件。
![]() |
---|
在接下來的範例和 MyCEE 範例中,運算式評估工具並不會分開計算所得的剖析。 |
Managed 程式碼
這是實作的IDebugExpressionEvaluator::Parse在 managed 程式碼。 請注意會延後此版本的方法來剖析IDebugParsedExpression::EvaluateSync所剖析的程式碼也會評估一次 (請參閱評估 [監看運算式)。
namespace EEMC
{
public class CParsedExpression : IDebugParsedExpression
{
public HRESULT Parse(
string expression,
uint parseFlags,
uint radix,
out string errorMessage,
out uint errorPosition,
out IDebugParsedExpression parsedExpression)
{
errorMessage = "";
errorPosition = 0;
parsedExpression =
new CParsedExpression(parseFlags, radix, expression);
return COM.S_OK;
}
}
}
Unmanaged 程式碼
這是實作的IDebugExpressionEvaluator::Parse unmanaged 程式碼中。 這個方法會呼叫 helper 函式, Parse、 要剖析的運算式,檢查是否發生錯誤,但這個方法會忽略產生的值。 正式的評估延後至IDebugParsedExpression::EvaluateSync在評估時其中剖析運算式 (請參閱評估 [監看運算式)。
STDMETHODIMP CExpressionEvaluator::Parse(
in LPCOLESTR pszExpression,
in PARSEFLAGS flags,
in UINT radix,
out BSTR *pbstrErrorMessages,
inout UINT *perrorCount,
out IDebugParsedExpression **ppparsedExpression
)
{
if (pbstrErrorMessages == NULL)
return E_INVALIDARG;
else
*pbstrErrormessages = 0;
if (pparsedExpression == NULL)
return E_INVALIDARG;
else
*pparsedExpression = 0;
if (perrorCount == NULL)
return E_INVALIDARG;
HRESULT hr;
// Look for errors in the expression but ignore results
hr = ::Parse( pszExpression, pbstrErrorMessages );
if (hr != S_OK)
return hr;
CParsedExpression* pparsedExpr = new CParsedExpression( radix, flags, pszExpression );
if (!pparsedExpr)
return E_OUTOFMEMORY;
hr = pparsedExpr->QueryInterface( IID_IDebugParsedExpression,
reinterpret_cast<void**>(ppparsedExpression) );
pparsedExpr->Release();
return hr;
}