IDebugHostEvaluator2::EvaluateExpression 方法 (dbgmodel.h)

EvaluateExpression 方法允许请求调试主机计算语言 (例如:C++) 表达式,并返回该表达式计算的结果值(装箱为 IModelObject)。 方法的此特定变体仅允许语言构造。 调试主机的表达式计算器中呈现的、语言 (不存在的任何其他功能,例如,) LINQ 查询方法已关闭用于计算。

由于此方法仅使用由正在调试的语言定义的内容,因此此方法可移植,并且可以安全地在主机与主机中使用。 实现特定语言调试的调试主机应采用与调试同一语言的任何其他主机相同的方式通过此方法计算表达式。 因此,这是执行表达式计算的首选方法。

语法

HRESULT EvaluateExpression(
  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<IModelObject> spThis; /* get some object, an example here: some native 
                                object with fields m_intVal and m_intVal2 */

ComPtr<IDebugHostEvaluator2> spEval;
if (SUCCEEDED(spHost.As(&spEval)))
{
    ComPtr<IModelObject> spResult;
    ComPtr<IKeyStore> spMetadata;
    if (SUCCEEDED(spEval->EvaluateExpression(
        USE_CURRENT_HOST_CONTEXT, 
        L"m_intVal + this->m_intVal2", 
        spThis.Get(), 
        &spResult, 
        &spMetadata)))
    {
        // spResult will have the result of a language evaluation of 
        // "m_intVal + this->m_intVal2" where the name binding context 
        // (e.g.: *this* pointer) is spThis
        // spMetadata will have any additional metadata (e.g.: display radix, etc...)
    }
}

要求

要求
Header dbgmodel.h

另请参阅

IDebugHostEvaluator2 接口