IDebugHostEvaluator2::EvaluateExtendedExpression 方法 (dbgmodel.h)

EvaluateExtendedExpression 方法类似于 EvaluateExpression 方法,只不过它重新启用特定调试主机选择添加到其表达式计算器的其他非语言功能。 例如,对于 Windows 调试工具,这将启用匿名类型、LINQ 查询、模块限定符、格式说明符和其他非 C/C++ 功能。

请务必注意,无法保证通过 EvaluateExtendedExpression 针对一个主机计算的表达式将针对调试同一语言的另一个主机正确计算。 表达式计算器中的扩展是给定主机的权限。 出于此确切原因,强烈建议客户端使用 EvaluateExpression 方法而不是 EvaluateExtendedExpression 方法。 使用此方法会降低调用者的可移植性。

语法

HRESULT EvaluateExtendedExpression(
  IDebugHostContext           *context,
  PCWSTR                      expression,
  IModelObject                *bindingContext,
  _COM_Errorptr_ IModelObject **result,
  IKeyStore                   **metadata
);

参数

context

在其中执行表达式计算的主机上下文。 例如,如果由于指针取消引用而对目标进行内存读取,则进行这些内存读取的地址空间由此参数提供。

expression

要进行求值的表达式。 这可以使用语言语法的主机专用扩展。

bindingContext

将在其中查找符号 (变量) 名称的绑定上下文。 对于 C++,这在语义上等效于此指针值。

result

表达式计算的结果值将在此处返回。

metadata

此处返回与表达式或结果关联的任何元数据。

返回值

此方法返回指示成功或失败的 HRESULT。

注解

代码示例

ComPtr<IDebugHost> spHost; /* get the host */

ComPtr<IDebugHostEvaluator2> spEval;
if (SUCCEEDED(spHost.As(&spEval)))
{
    ComPtr<IModelObject> spNotepadProcesses;

    // We can use any syntax that's private to the host (not only 
    // language syntax).  This is not necessarily portable from host to host
    if (SUCCEEDED(spEval->EvaluateExtendedExpression(
        USE_CURRENT_HOST_CONTEXT, 
        L"@$cursession->Processes.Where(p => p.Name == \"notepad.exe\")", 
        nullptr, 
        &spNotepadProcesses, 
        nullptr)))
    {
        // spNotepadProcesses will contain a collection of every process 
        // named (exactly) "notepad.exe".  Such can be iterated with IIterableConcept.
    }
}

要求

要求
Header dbgmodel.h

另请参阅

IDebugHostEvaluator2 接口