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:
<pre>
+ void *user_data = NULL;
+
+ mono_runtime_exec_managed_code (domain, main_thread_handler, user_data);
+ </pre>
+
+ Where your main_thread_handler can load your assembly and execute it:
+
+ <pre>
+ static void main_thread_handler (gpointer user_data)
+ {
MonoAssembly *assembly;
assembly = mono_domain_assembly_open (domain, "file.dll");
The Boehm GC system needs to catch your calls to the pthreads
layer, so in each file where you use pthread.h you should
- include the <gc/gc.h> file.
+ 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
It may not be possible to manage exceptions in that case,
though. I need to think more about it.
+** Threading issues
+
+ If your application creates threads on its own, and you want them to
+ be able to call code into the CIL universe with Mono, you have to
+ register the thread with Mono before issuing the call.
+
+ To do so, call the mono_thread_attach() function before you execute
+ any managed code from the thread
+
* Samples
See the sample programs in mono/sample/embed for examples of