[Mono-dev] Mixed Mode Assemblies
Jonathan Pryor
jonpryor at vt.edu
Thu Jul 7 16:34:59 EDT 2011
On Jul 7, 2011, at 11:55 AM, arkain wrote:
> I understand the reasons why the developers chose to leave out support for
> developing mixed-mode assemblies using mono: the lack of cross-platform
> compatibility in such assemblies. However, I would argue that such things
> are not a consideration for those who would choose to develop such
> assemblies.
Mono supports mixed mode assemblies on Windows:
http://www.mono-project.com/CPlusPlus
"Mixed-mode assemblies are experimentally supported only on Windows..."
Mono can't support mixed-mode assemblies on any other platform, for a simple reason: in order for a mixed-mode assembly to be really useful, it needs to be loadable as a native library on the platform. This works on Windows because assemblies are PE/COFF files, and Windows dynamic link libraries are PE/COFF, so everything Just Works.
But try using dlopen(3) on Linux to load an assembly, and dlopen(3) will (rightfully) fail -- Linux wants ELF, not PE. There's a rather fundamental file format difference here.
That said there are efforts to improve the Mono/C++ interop story, e.g. via COM interop (which does work on Linux):
http://blog.worldofcoding.com/2009/08/binding-c-apis.html
There was a GSOC project last year to improve C++/Mono interop, and Andreia Gaita presented on it:
http://weblog.savanne.be/files/fosdem-mono-2011/cpp_interop.pdf
There is also a current GSOC project:
http://www.google-melange.com/gsoc/project/google/gsoc2011/corrado/13001
So hopefully things will keep improving, but note that the above C++/mono interop techniques are _not_ "mixed mode assemblies." (XP)COM is a binary standard (via virtual function tables) which works quite nicely with dlopen(3)/etc., while the current C++ work can be thought of as an elaborate P/Invoke-like solution for C++ code.
- Jon
More information about the Mono-devel-list
mailing list