pubfn initialize() -> Result<(), HRESULT> { let err = unsafe { CoInitializeEx(null(), COINIT_MULTITHREADED.try_into().unwrap()) }; if err != S_OK && err != S_FALSE { // S_FALSE just means COM is already initialized
Err(err)
} else {
Ok(())
}
}
pubstruct ComPtr<T>(*mut T) where
T: Interface; impl<T> ComPtr<T> where
T: Interface,
{ /// Creates a `ComPtr` to wrap a raw pointer. /// It takes ownership over the pointer which means it does __not__ call `AddRef`. /// `T` __must__ be a COM interface that inherits from `IUnknown`. pubunsafefn from_raw(ptr: *mut T) -> ComPtr<T> {
assert!(!ptr.is_null());
ComPtr(ptr)
} /// For internal use only. fn as_unknown(&self) -> &IUnknown { unsafe { &*(self.0as *mut IUnknown) }
} /// Performs `QueryInterface` fun. pubfn cast<U>(&self) -> Result<ComPtr<U>, i32> where
U: Interface,
{ letmut obj = null_mut(); let err = unsafe { self.as_unknown().QueryInterface(&U::uuidof(), &mut obj) }; if err < 0 { return Err(err);
}
Ok(unsafe { ComPtr::from_raw(obj as *mut U) })
}
} impl<T> Deref for ComPtr<T> where
T: Interface,
{ type Target = T; fn deref(&self) -> &T { unsafe { &*self.0 }
}
} impl<T> Clone for ComPtr<T> where
T: Interface,
{ fn clone(&self) -> Self { unsafe { self.as_unknown().AddRef();
ComPtr::from_raw(self.0)
}
}
} impl<T> Drop for ComPtr<T> where
T: Interface,
{ fn drop(&mutself) { unsafe { self.as_unknown().Release();
}
}
} pubstruct BStr(BSTR); impl BStr { pubunsafefn from_raw(s: BSTR) -> BStr {
BStr(s)
} pubfn to_osstring(&self) -> OsString { let len = unsafe { SysStringLen(self.0) }; let slice = unsafe { from_raw_parts(self.0, len as usize) };
OsStringExt::from_wide(slice)
}
} impl Drop for BStr { fn drop(&mutself) { unsafe { SysFreeString(self.0) };
}
}
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.0Bemerkung:
(vorverarbeitet am 2026-09-28)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.