com 0.6.0

Utilities for implementing COM Client and Servers
Documentation
# 0.6.0


### Fixes


- Soundness bug fix: The `Class::dec_ref_count` trait method is now marked `unsafe`.
- 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 by
  `com::class!` and `com::interfaces!`.

### Added


- COM servers now generate `From` impls for the interfaces implemented by a server.
  You can now use `IFoo::from(&**my_server)` to acquire an interface pointer to a
  server. This eliminates the need to use `unwrap()` on a call to
  `query_interface()`.
- `ClassAllocation<T>` now implements `Clone`, which simply clones an owned
  reference.
- `ClassAllocation<T>` now implements `Send` and `Sync`.

- COM servers may now implement `Drop`. Previously, the `com::class!` macro
  generated a `Drop` implementation, which prevented apps from providing their
  own. The `Drop` implementation runs when the last reference is released. 
- Added unit tests that cover `com::class!` parsing and code generation.

### Changed


- 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.

# 0.5.0 (2021-10-05)


### Fixes


- Fix `class!` macro's buggy parsing of complex inheritance hierarchies [#209]https://github.com/microsoft/com-rs/pull/209
- Properly handle COM interfaces with conflicting method names [#219]https://github.com/microsoft/com-rs/pull/219

### Added


- Add `usize` as `AbiTransferable` [#207]https://github.com/microsoft/com-rs/pull/207
- Implement `PartialEq` and `Eq` for interfaces [#220]https://github.com/microsoft/com-rs/pull/220

### Changed


- The minimum supported Rust version is now 1.46.0 [#221]https://github.com/microsoft/com-rs/pull/221

# 0.4.0 (2021-01-27)


### Fixes


- Clippy warnings have been fixed [#201]https://github.com/microsoft/com-rs/pull/201
- A few things which were not properly being converted to their ABI representation now are [#191]https://github.com/microsoft/com-rs/pull/191 
- Incorrect CLSID Registry keys [#190]https://github.com/microsoft/com-rs/pull/190
- Handle COM classes with multiple fields [#188]https://github.com/microsoft/com-rs/pull/188
- Keep leading zeros in COM GUID [#187]https://github.com/microsoft/com-rs/pull/187

### Added


- Support for `#[no_std]` environments [#199]https://github.com/microsoft/com-rs/pull/199

### Changed


- The ABI for COM functions is now "system" instead of hard-coding "stdcall" [#203]https://github.com/microsoft/com-rs/pull/203

# 0.3.0 (2020-04-03)


### Changed


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.

# 0.2.0 (2020-04-03)


### Fixes


- Fixed docs.rs build [#93]https://github.com/microsoft/com-rs/pull/93
- Support paths when defining super traits [#110]https://github.com/microsoft/com-rs/pull/110
- Made interface pointers more correct [#125]https://github.com/microsoft/com-rs/pull/125
- Fix multiple user generated fields not being generated [#132]https://github.com/microsoft/com-rs/pull/132

### Added


- `Debug` for `IID` [#128]https://github.com/microsoft/com-rs/pull/128
- Allow more interfaces [#135]https://github.com/microsoft/com-rs/pull/135

### Changed


- Define IIDs as strings [#107]https://github.com/microsoft/com-rs/pull/107
- Require unsafe for interface methods [#120]https://github.com/microsoft/com-rs/pull/120
- Remove winapi as dependency [#122]https://github.com/microsoft/com-rs/pull/122
- Interface{Ptr,Rc} => Com{Ptr,Rc} [#129]https://github.com/microsoft/com-rs/pull/129
- Runtime is now done through stand alone functions [#136]https://github.com/microsoft/com-rs/pull/136

# 0.1.0 (2019-10-01)


Initial release of the `com` crate.

A one stop shop for all things related to [COM](https://docs.microsoft.com/en-us/windows/win32/com/component-object-model--com--portal) 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.