IDebugHostEvaluator2::EvaluateExtendedExpression 方法 (dbgmodel.h)

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

请务必注意,无法保证通过 EvaluateExtendedExpression 针对一个主机计算的表达式将针对调试同一语言的另一个主机正确计算。 表达式计算器中的扩展是给定主机的 purview。 强烈建议客户端出于此确切原因使用 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 接口