update known-issues
[mono.git] / web / embedded-api
index 12e0c30450b4b239c476f9d1c04985890231420d..3b405c98ddd191575e917267cc3f469c39528146 100755 (executable)
        not interfere with code in other domains.  This is useful if
        you want to host different applications in your program.  
 
        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>
 
        <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");
                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
 
        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 &lt;gc/gc.h&gt; 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
 
 
 * 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.
 
        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
 * Samples
 
        See the sample programs in mono/sample/embed for examples of