- Soundness bug fix: The
Class::dec_ref_count
trait method is now markedunsafe
. - It was previously possible for a failed allocation to cause a memory leak during construction of COM servers. This version fixes the leak.
- Fixed all Clippy warnings in
com
crates and in the code generated bycom::class!
andcom::interfaces!
.
-
COM servers now generate
From
impls for the interfaces implemented by a server. You can now useIFoo::from(&**my_server)
to acquire an interface pointer to a server. This eliminates the need to useunwrap()
on a call toquery_interface()
. -
ClassAllocation<T>
now implementsClone
, which simply clones an owned reference. -
ClassAllocation<T>
now implementsSend
andSync
. -
COM servers may now implement
Drop
. Previously, thecom::class!
macro generated aDrop
implementation, which prevented apps from providing their own. TheDrop
implementation runs when the last reference is released. -
Added unit tests that cover
com::class!
parsing and code generation.
-
COM servers now use
AtomicU32
for reference counts, so they can now be used in thread-safe systems. (We plan on providing the option to select between thread-safe and non-thread-safe reference counts, in the future.) -
COM servers now generate static vtables, rather than dynamically allocating and building vtables in the heap. This reduces memory and CPU used.
- Fix
class!
macro's buggy parsing of complex inheritance hierarchies #209 - Properly handle COM interfaces with conflicting method names #219
- The minimum supported Rust version is now 1.46.0 #221
- Clippy warnings have been fixed #201
- A few things which were not properly being converted to their ABI representation now are #191
- Incorrect CLSID Registry keys #190
- Handle COM classes with multiple fields #188
- Keep leading zeros in COM GUID #187
- Support for
#[no_std]
environments #199
- The ABI for COM functions is now "system" instead of hard-coding "stdcall" #203
The public API for this crate has changed considerably since the previous version. Please take a look at the README and docs folder for information on how to use this crate.
- Fixed docs.rs build #93
- Support paths when defining super traits #110
- Made interface pointers more correct #125
- Fix multiple user generated fields not being generated #132
- Define IIDs as strings #107
- Require unsafe for interface methods #120
- Remove winapi as dependency #122
- Interface{Ptr,Rc} => Com{Ptr,Rc} #129
- Runtime is now done through stand alone functions #136
Initial release of the com
crate.
A one stop shop for all things related to COM programming in Rust.
This library exposes various macros, structs and functions to the user for both producing and consuming COM components in an idiomatic manner.