次の方法で共有


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;
}

関連項目