Struct Agile

Source
pub struct Agile<I: Interface + AsIUnknown> { /* private fields */ }
Expand description

A Send+Sync, IAgileReference-held interface pointer.

Implementations§

Source§

impl<I: Interface + AsIUnknown> Agile<I>

Source

pub fn try_from_eager(unk: impl AsRef<Rc<I>>) -> Result<Self, MethodHResult>

Eagerly marshal a COM interface for use in another apartment. Will fail if this is not possible.

Source

pub fn try_from_lazy(unk: impl AsRef<Rc<I>>) -> Result<Self, MethodHResult>

Lazily marshal a COM interface for use in another thread. May fail when converted back into an Rc if in another COM apartment.

Source

pub fn resolve(&self) -> Result<Rc<I>, MethodHResult>

[microsoft.com] Get a COM pointer to I that is safe to use from the current thread’s COM apartment

Trait Implementations§

Source§

impl<I: Interface + AsIUnknown> AsRef<Agile<I>> for Agile<I>

Source§

fn as_ref(&self) -> &Self

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl<I: Interface + AsIUnknown> Clone for Agile<I>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<I: Interface + AsIUnknown> TryFrom<&Agile<I>> for Rc<I>

Source§

type Error = MethodHResult

The type returned in the event of a conversion error.
Source§

fn try_from(value: &Agile<I>) -> Result<Self, Self::Error>

Performs the conversion.
Source§

impl<I: Interface + AsIUnknown> TryFrom<&Rc<I>> for Agile<I>

Source§

type Error = MethodHResult

The type returned in the event of a conversion error.
Source§

fn try_from(value: &Rc<I>) -> Result<Self, Self::Error>

Performs the conversion.
Source§

impl<I: Interface + AsIUnknown> TryFrom<Agile<I>> for Rc<I>

Source§

type Error = MethodHResult

The type returned in the event of a conversion error.
Source§

fn try_from(value: Agile<I>) -> Result<Self, Self::Error>

Performs the conversion.
Source§

impl<I: Interface + AsIUnknown> TryFrom<Rc<I>> for Agile<I>

Source§

type Error = MethodHResult

The type returned in the event of a conversion error.
Source§

fn try_from(value: Rc<I>) -> Result<Self, Self::Error>

Performs the conversion.
Source§

impl<I: Interface + AsIUnknown> Send for Agile<I>

Source§

impl<I: Interface + AsIUnknown> Sync for Agile<I>

§Safety

The entire point of an IAgileReference, like Agile contains is that it can be safely shared between multiple threads, even if they don’t belong to the same COM apartment, even if the original interface pointer was apartment-specific. As such, Agile should be safe to mark Send+Sync.

  • Types which implement IAgileObject will remain unwrapped
  • Types which implement INoMarshal will fail to convert to Agile in the first place
  • Types which implement neither will be wrapped in lightweight in-process-only marshaling

Auto Trait Implementations§

§

impl<I> Freeze for Agile<I>

§

impl<I> RefUnwindSafe for Agile<I>
where I: RefUnwindSafe,

§

impl<I> Unpin for Agile<I>

§

impl<I> UnwindSafe for Agile<I>
where I: RefUnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.