Miguel de Icaza (miguel@ximian.com),
Paolo Molaro (lupus@ximian.com)
+
This document describes how to embed the Mono runtime in your
application, and how to invoke CIL methods from C, and how to
invoke C code from CIL. Both the JIT and interpreter can be
embedded in very similar ways so most of what is described
here can be used in either case.
+* IMPORTANT
+
+ This document is now outdated, see:
+
+ http://www.mono-project.com/Embedding_Mono
+
+ For an up-to-date version of this document
+
* Embedding the runtime.
Embedding the runtime consists of various steps:
not interfere with code in other domains. This is useful if
you want to host different applications in your program.
- Then you can load an assembly containing code into the domain:
+ Now, it is necessary to transfer control to Mono, and setup
+ the threading infrastructure, you do this like this:
+
+ void *user_data = NULL;
+
+ mono_runtime_exec_managed_code (domain, main_thread_handler, user_data);
+
+ Where your main_thread_handler can load your assembly and execute it:
+
+ static void main_thread_handler (gpointer user_data)
MonoAssembly *assembly;
layer, so in each file where you use pthread.h you should
include the <gc/gc.h> file.
+ If you can not do this for any reasons, just remember that you
+ can not store pointers to Mono Objects on the stack, you can
+ store them safely in the heap, or in global variables though
+
* Exposing C code to the CIL universe
The Mono runtime provides two mechanisms to expose C code to