Struct StaticComObject

pub struct StaticComObject<T>
where T: ComObjectInner,
{ /* private fields */ }
Expand description

Enables applications to define COM objects using static storage. This is useful for factory objects, stateless objects, or objects which use need to contain or use mutable global state.

COM objects that are defined using StaticComObject have their storage placed directly in static storage; they are not stored in the heap.

COM objects defined using StaticComObject do have a reference count and this reference count is adjusted when owned COM interface references (e.g. IFoo and IUnknown) are created for the object. The reference count is initialized to 1.

§Example

#[implement(IFoo)]
struct MyApp {
    // ...
}

static MY_STATIC_APP: StaticComObject<MyApp> = MyApp { ... }.into_static();

fn get_my_static_ifoo() -> IFoo {
    MY_STATIC_APP.to_interface()
}

Implementations§

§

impl<T> StaticComObject<T>
where T: ComObjectInner,

pub const fn from_outer(outer: T::Outer) -> Self

Wraps outer in a StaticComObject.

§

impl<T> StaticComObject<T>
where T: ComObjectInner,

pub const fn get(&'static self) -> &'static T::Outer

Gets access to the contained value.

Trait Implementations§

§

impl<T> Deref for StaticComObject<T>
where T: ComObjectInner,

§

type Target = <T as ComObjectInner>::Outer

The resulting type after dereferencing.
§

fn deref(&self) -> &Self::Target

Dereferences the value.

Auto Trait Implementations§

§

impl<T> Freeze for StaticComObject<T>
where <T as ComObjectInner>::Outer: Freeze,

§

impl<T> RefUnwindSafe for StaticComObject<T>

§

impl<T> Send for StaticComObject<T>
where <T as ComObjectInner>::Outer: Send,

§

impl<T> Sync for StaticComObject<T>
where <T as ComObjectInner>::Outer: Sync,

§

impl<T> Unpin for StaticComObject<T>
where <T as ComObjectInner>::Outer: Unpin,

§

impl<T> UnwindSafe for StaticComObject<T>

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> 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<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
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.