"The Mono runtime engine has many language interoperability features but has never had a strong story to interop with C++.
Thanks to the work of Alex Corrado, Andreia Gaita and Zoltan Varga, this is about to change.
The short story is that the new CXXI technology allows C#/.NET developers to:
- Easily consume existing C++ classes from C# or any other .NET language
- Instantiate C++ objects from C#
- Invoke C++ methods in C++ classes from C# code
- Invoke C++ inline methods from C# code (provided your library is compiled with -fkeep-inline-functions or that you provide a surrogate library)
- Subclass C++ classes from C#
- Override C++ methods with C# methods
- Expose instances of C++ classes or mixed C++/C# classes to both C# code and C++ as if they were native code.
CXXI is the result of two summers of work from Google's Summer of Code towards improving the interoperability of Mono with the C++ language.
CXXI is not finished, but it is a strong foundation to drastically improve the interoperability between .NET managed languages and C++.
Currently CXXI achieves all of its work at runtime by using System.Reflection.Emit to generate the bridges on demand. This is useful as it can dynamically detect the ABI used by a C++ compiler.
One of the projects that we are interested in doing is to add support for static compilation, this would allow PS3 and iPhone users to use this technology. It would mean that the resulting library would be tied to the platform on which the CXXI tooling was used.
Now that's pretty darn interesting. With the resurgence of C++, this project could be something major... Will be watching. :)