IDebugExpressionEvaluator

重要

在 Visual Studio 2015 中,这种实现表达式计算器的方法已弃用。 有关实现 CLR 表达式计算器的信息,请参阅 CLR 表达式计算器托管表达式计算器示例

此接口表示表达式计算器。

语法

IDebugExpressionEvaluator : IUnknown

实现者须知

表达式计算器必须实现此接口。

对调用者的说明

若要获取此接口,请使用计算器的类 ID(CLSID)通过 CoCreateInstance 方法实例化表达式计算器。 请参阅示例。

Vtable 顺序中的方法

下表显示了 IDebugExpressionEvaluator 方法。

方法 说明
Parse 将表达式字符串转换为已分析的表达式。
GetMethodProperty 获取方法的局部变量、参数和其他属性。
GetMethodLocationProperty 将方法位置和偏移量转换为内存地址。
SetLocale 确定用于创建可打印结果的语言。
SetRegistryRoot 设置注册表根目录。 用于并行调试。

备注

在典型情况下,调试引擎(DE)在调用 ParseText 时实例化表达式计算器(企业版)。 由于 DE 知道要使用的企业版的语言和供应商,因此 DE 从注册表中获取企业版的 CLSID(用于调试函数的 SDK 帮助程序,GetEEMetric有助于进行此检索)。

实例化企业版后,DE 调用 Parse 分析表达式并将其存储在 IDebugParsedExpression 对象中。 稍后,对 EvaluateSync 的调用将计算表达式。

要求

标头:ee.h

命名空间:Microsoft.VisualStudio.Debugger.Interop

程序集:Microsoft.VisualStudio.Debugger.Interop.dll

示例

此示例演示如何在源代码中实例化给定符号提供程序和地址的表达式计算器。 此示例使用 SDK 帮助程序中的函数GetEEMetric来调试库 dbgmetric.lib。

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

另请参阅