IDebugExpressionEvaluator
重要
Visual Studio 2015 では、この方法での式エバリュエーターの実装は非推奨です。 CLR 式エバリュエーターの実装については、CLR 式エバリュエーターおよびマネージド式エバリュエーターのサンプルに関する記事をご覧ください。
このインターフェイスは、式エバリュエーターを表します。
構文
IDebugExpressionEvaluator : IUnknown
実装側の注意
式エバリュエーターは、このインターフェイスを実装する必要があります。
呼び出し元に関する注意事項
このインターフェイスを取得するには、エバリュエーターのクラス ID (CLSID) を使用して、CoCreateInstance
メソッドを介して式エバリュエーターをインスタンス化します。 「例」を参照してください。
Vtable 順序のメソッド
次の表に、IDebugExpressionEvaluator
のメソッドを示します。
メソッド | 説明 |
---|---|
Parse | 式の文字列を解析された式に変換します。 |
GetMethodProperty | メソッドのローカル変数、引数、およびその他のプロパティを取得します。 |
GetMethodLocationProperty | メソッドの位置とオフセットをメモリ アドレスに変換します。 |
SetLocale | 出力可能な結果を作成するために使用する言語を決定します。 |
SetRegistryRoot | レジストリ ルートを設定します。 サイドバイサイドのデバッグに使用されます。 |
解説
一般的な状況では、デバッグ エンジン (DE) は ParseText の呼び出しの結果として式エバリュエーター (EE) をインスタンス化します。 DE は使用する EE の言語とベンダーを認識しているため、DE は、EE の CLSID をレジストリから取得します (この取得には、デバッグ用の SDK ヘルパー関数、GetEEMetric
が役立ちます)。
EE がインスタンス化された後、DE は Parse を呼び出して式を解析し、IDebugParsedExpression オブジェクトに格納します。 後で、EvaluateSync の呼び出しで、式が評価されます。
要件
ヘッダー: ee.h
名前空間: Microsoft.VisualStudio.Debugger.Interop
アセンブリ: Microsoft.VisualStudio.Debugger.Interop.dll
例
この例では、シンボル プロバイダーとソース コード内のアドレスを指定して、式エバリュエーターをインスタンス化する方法を示します。 この例では、デバッグ用の SDK ヘルパー ライブラリ、dbgmetric.lib の関数である GetEEMetric
を使用します。
IDebugExpressionEvaluator GetExpressionEvaluator(IDebugSymbolProvider pSymbolProvider,
IDebugAddress *pSourceAddress)
{
// This is typically defined globally but is specified here just
// for this example.
static const WCHAR strRegistrationRoot[] = L"Software\\Microsoft\\VisualStudio\\8.0Exp";
IDebugExpressionEvaluator *pEE = NULL;
if (pSymbolProvider != NULL && pSourceAddress != NULL) {
HRESULT hr = S_OK;
GUID languageGuid = { 0 };
GUID vendorGuid = { 0 };
hr = pSymbolProvider->GetLanguage(pSourceAddress,
&languageGuid,
&vendorGuid);
if (SUCCEEDED(hr)) {
CLSID clsidEE = { 0 };
CComPtr<IDebugExpressionEvaluator> spExpressionEvaluator;
// Get the expression evaluator's CLSID from the registry.
::GetEEMetric(languageGuid,
vendorGuid,
metricCLSID,
&clsidEE,
strRegistrationRoot);
if (!IsEqualGUID(clsidEE,GUID_NULL)) {
// Instantiate the expression evaluator.
spExpressionEvaluator.CoCreateInstance(clsidEE);
}
if (spExpressionEvaluator != NULL) {
pEE = spExpressionEvaluator.Detach();
}
}
}
return pEE;
}