use crate::{DbgModelResult, dbgmodel::*, dmerr, impl_debug_interface, pcw};
use windows::Win32::System::Diagnostics::Debug::Extensions::{
IDebugHostEvaluator, IDebugHostEvaluator2,
};
use windy::WStr;
impl_debug_interface!(
DebugHostEvaluator,
DebugHostEvaluatorRef,
IDebugHostEvaluator2,
IDebugHostEvaluator
);
impl DebugHostEvaluator {
pub fn evaluate_expression<'a>(
&self,
context: impl Into<NonNullHostContextBy<'a>>,
expression: impl AsRef<WStr>,
binding_context: &ModelObject,
) -> DbgModelResult<(ModelObject, Option<KeyStore>)> {
let mut result = None;
let mut metadata = None;
unsafe {
dmerr!(
result,
self.0.EvaluateExpression(
context.into().as_raw(),
pcw!(expression),
binding_context.as_raw(),
&mut result,
Some(&mut metadata)
)
);
}
Ok((result.unwrap().into(), metadata.map(Into::into)))
}
pub fn evaluate_extended_expression<'a>(
&self,
context: impl Into<NonNullHostContextBy<'a>>,
expression: impl AsRef<WStr>,
binding_context: &ModelObject,
) -> DbgModelResult<(ModelObject, Option<KeyStore>)> {
let mut result = None;
let mut metadata = None;
unsafe {
dmerr!(
result,
self.0.EvaluateExtendedExpression(
context.into().as_raw(),
pcw!(expression),
binding_context.as_raw(),
&mut result,
Some(&mut metadata)
)
);
}
Ok((result.unwrap().into(), metadata.map(Into::into)))
}
}