Partial cross-platform implementation of the Component Object Model (COM) runtime and Active Template Library (ATL).
Designed as a compatibility library to enable usage of existing COM/ATL classes also on non-Windows platforms.
Developed due to lack of knowledge of any better alternatives. Please contact the author if you're aware of any better alternative, and he'll be happy to scrap this project. I'm hoping that Microsoft xlang or a similar project will eventually replace this project, but cross-platform support have so far been postponed.
- Support most COM classes implemented in ATL.
- Support most automation-compatible types, so that the same COM classes can be directly accessed from C# and Python (using comtypes) on Windows without any language wrappers or proxy/stub DLLs for marshaling.
The following operating systems are currently supported:
- Linux
- MacOS
- Android
- iOS
- WebAssembly with Emscripten compiler
Both the gcc and clang compilers are supported.
There's no point in supporting Windows, since the same functionality is already inbuilt there.
- Complete COM or ATL support.
- Wrapper-code-free access from C# and Python on non-Windows.
- Out-of-process marshalling on non-Windows.
Contributions for addressing missing features are welcome.
The repo also contains a SharedRef wrapper class for non-owning weak references through a IWeakRef interface. This is similar to IWeakReference, but is also compatible with classical IUnknown-based COM.