pub unsafe trait ComInterface: Interface + Clone {
    const IID: GUID;

    // Provided methods
    fn as_unknown(&self) -> &IUnknown { ... }
    fn cast<T: ComInterface>(&self) -> Result<T> { ... }
    fn downgrade(&self) -> Result<Weak<Self>> { ... }
    unsafe fn query(
        &self,
        iid: *const GUID,
        interface: *mut *mut c_void
    ) -> HRESULT { ... }
}
Expand description

Provides low-level access to a COM interface.

This trait is automatically implemented by the generated bindings and should not be implemented manually.

Safety

It is only safe to implement this trait if the implementing type is a valid COM interface pointer meaning the following criteria are met:

  • its in-memory representation is equal to NonNull<NonNull<Self::VTable>>
  • the vtable is correctly structured beginning with the IUnknown function pointers
  • the vtable must be the correct vtable for the supplied IID

Required Associated Constants§

const IID: GUID

A unique identifier representing this interface.

Provided Methods§

fn as_unknown(&self) -> &IUnknown

fn cast<T: ComInterface>(&self) -> Result<T>

Attempts to cast the current interface to another interface using QueryInterface.

The name cast is preferred to query because there is a WinRT method named query but not one named cast.

fn downgrade(&self) -> Result<Weak<Self>>

Attempts to create a Weak reference to this object.

unsafe fn query(&self, iid: *const GUID, interface: *mut *mut c_void) -> HRESULT

Call QueryInterface on this interface

Safety

interface must be a non-null, valid pointer for writing an interface pointer.

Object Safety§

This trait is not object safe.

Implementors§

§

impl ComInterface for IInspectable

§

const IID: GUID = _

§

impl ComInterface for IUnknown

§

const IID: GUID = _