pub trait Dispatch: Debug {
// Required methods
fn get(&self, dispid: i32) -> Result<Value, ComError>;
fn put(&self, dispid: i32, value: Value) -> Result<(), ComError>;
fn call(&self, dispid: i32, args: &[Value]) -> Result<Value, ComError>;
// Provided methods
fn call_with_outputs(
&self,
dispid: i32,
args: &[Value],
outputs: &[OutKind],
) -> Result<(Value, Vec<Value>), ComError> { ... }
fn duplicate(&self) -> Option<Box<dyn Dispatch>> { ... }
fn as_idispatch(&self) -> Option<&IDispatch> { ... }
}Expand description
The late-bound call surface a wrapper needs from a COM object.
Kept deliberately small; it grows a member only when a wrapper first needs one, each with its own test.
Required Methods§
Sourcefn get(&self, dispid: i32) -> Result<Value, ComError>
fn get(&self, dispid: i32) -> Result<Value, ComError>
Reads a property by dispatch id (DISPATCH_PROPERTYGET, no arguments).
§Errors
ComError::Hresult if the COM call fails, or
ComError::UnexpectedType if the returned value has an unmodeled type.
Sourcefn put(&self, dispid: i32, value: Value) -> Result<(), ComError>
fn put(&self, dispid: i32, value: Value) -> Result<(), ComError>
Sets a property by dispatch id (DISPATCH_PROPERTYPUT).
Required, deliberately: a default body returning “not implemented” would be a stub that silently turns a missing implementation into a runtime error. Making it required turns that into a compile error instead.
§Errors
ComError::Hresult if the COM call fails.
Sourcefn call(&self, dispid: i32, args: &[Value]) -> Result<Value, ComError>
fn call(&self, dispid: i32, args: &[Value]) -> Result<Value, ComError>
Invokes a method by dispatch id (DISPATCH_METHOD) with arguments.
Required for the same reason as Dispatch::put.
§Errors
ComError::Hresult if the COM call fails, or
ComError::UnexpectedType if the returned value has an unmodeled type.
Provided Methods§
Sourcefn call_with_outputs(
&self,
dispid: i32,
args: &[Value],
outputs: &[OutKind],
) -> Result<(Value, Vec<Value>), ComError>
fn call_with_outputs( &self, dispid: i32, args: &[Value], outputs: &[OutKind], ) -> Result<(Value, Vec<Value>), ComError>
Calls a member that reports part of its answer through by-reference arguments.
The outputs describe slots appended after args, in declaration
order. Returns the member’s own result together with what it wrote into
each slot.
§Errors
ComError if the call fails, or ComError::UnexpectedType on a
dispatch that has no COM identity to call through.
Sourcefn duplicate(&self) -> Option<Box<dyn Dispatch>>
fn duplicate(&self) -> Option<Box<dyn Dispatch>>
An owned handle to the same COM object, when there is one.
COM interface pointers are reference counted, so duplicating one is a refcount bump rather than a copy of the object. This exists because passing an object back to the engine needs an owned handle, and a caller normally only has a borrow.
Returns None for test fakes, which have no COM identity to share.
Sourcefn as_idispatch(&self) -> Option<&IDispatch>
fn as_idispatch(&self) -> Option<&IDispatch>
The underlying IDispatch, when this really is a live COM object.
Returns None for test fakes, which is what stops a fake from being
marshalled into a VARIANT and handed to the engine.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".