Merge pull request #1325 from madrang/CryptoToolsCtorCheck
[mono.git] / docs / sources / mono-api-internal.html
1 <h1>Mono Internals</h1>
2
3         <p>This section documents some of the internal APIs used
4         inside Mono that developers extending or altering Mono might
5         want to use.
6
7 <h2>Marshalling functions</h2>
8
9 <h4><a name="api:mono_marshal_alloc">mono_marshal_alloc</a></h4>
10 <h4><a name="api:mono_marshal_asany">mono_marshal_asany</a></h4>
11 <h4><a name="api:mono_marshal_free_array">mono_marshal_free_array</a></h4>
12 <h4><a name="api:mono_marshal_free_asany">mono_marshal_free_asany</a></h4>
13 <h4><a name="api:mono_marshal_free">mono_marshal_free</a></h4>
14 <h4><a name="api:mono_marshal_get_castclass">mono_marshal_get_castclass</a></h4>
15 <h4><a name="api:mono_marshal_get_delegate_begin_invoke">mono_marshal_get_delegate_begin_invoke</a></h4>
16 <h4><a name="api:mono_marshal_get_delegate_end_invoke">mono_marshal_get_delegate_end_invoke</a></h4>
17 <h4><a name="api:mono_marshal_get_delegate_invoke">mono_marshal_get_delegate_invoke</a></h4>
18 <h4><a name="api:mono_marshal_get_icall_wrapper">mono_marshal_get_icall_wrapper</a></h4>
19 <h4><a name="api:mono_marshal_get_isinst">mono_marshal_get_isinst</a></h4>
20 <h4><a name="api:mono_marshal_get_ldfld_remote_wrapper">mono_marshal_get_ldfld_remote_wrapper</a></h4> 
21 <h4><a name="api:mono_marshal_get_ldfld_wrapper">mono_marshal_get_ldfld_wrapper</a></h4>
22 <h4><a name="api:mono_marshal_get_managed_wrapper">mono_marshal_get_managed_wrapper</a></h4>
23 <h4><a name="api:mono_marshal_get_native_wrapper">mono_marshal_get_native_wrapper</a></h4>
24 <h4><a name="api:mono_marshal_get_proxy_cancast">mono_marshal_get_proxy_cancast</a></h4>
25 <h4><a name="api:mono_marshal_get_ptr_to_struct">mono_marshal_get_ptr_to_struct</a></h4>
26 <h4><a name="api:mono_marshal_get_remoting_invoke_for_target">mono_marshal_get_remoting_invoke_for_target</a></h4>
27 <h4><a name="api:mono_marshal_get_remoting_invoke">mono_marshal_get_remoting_invoke</a></h4>
28 <h4><a name="api:mono_marshal_get_remoting_invoke_with_check">mono_marshal_get_remoting_invoke_with_check</a></h4>
29 <h4><a name="api:mono_marshal_get_runtime_invoke">mono_marshal_get_runtime_invoke</a></h4>
30 <h4><a name="api:mono_marshal_get_stelemref">mono_marshal_get_stelemref</a></h4>
31 <h4><a name="api:mono_marshal_get_stfld_remote_wrapper">mono_marshal_get_stfld_remote_wrapper</a></h4> 
32 <h4><a name="api:mono_marshal_get_stfld_wrapper">mono_marshal_get_stfld_wrapper</a></h4>
33 <h4><a name="api:mono_marshal_get_struct_to_ptr">mono_marshal_get_struct_to_ptr</a></h4>
34 <h4><a name="api:mono_marshal_get_synchronized_wrapper">mono_marshal_get_synchronized_wrapper</a></h4>
35 <h4><a name="api:mono_marshal_get_unbox_wrapper">mono_marshal_get_unbox_wrapper</a></h4> 
36 <h4><a name="api:mono_marshal_get_xappdomain_invoke">mono_marshal_get_xappdomain_invoke</a></h4>
37 <h4><a name="api:mono_marshal_load_type_info">mono_marshal_load_type_info</a></h4>
38 <h4><a name="api:mono_marshal_method_from_wrapper">mono_marshal_method_from_wrapper</a></h4>
39 <h4><a name="api:mono_marshal_realloc">mono_marshal_realloc</a></h4>
40 <h4><a name="api:mono_marshal_set_last_error">mono_marshal_set_last_error</a></h4>
41 <h4><a name="api:mono_marshal_type_size">mono_marshal_type_size</a></h4>
42
43 <h2>Metadata Loading Errors</h2>
44
45         <p>The routines in this section are used to cope with errors
46         during metadata loading.  Errors in metadata handling can
47         happen for many reason, and these include (this is not an
48         exhaustive list).
49
50         <ul>
51                 <li>An assembly referenced is missing.
52                 <li>Fields referenced are missing.
53                 <li>Methods referenced are missing.
54         </ul>
55
56         <p>The <tt>mono_loader_set_*</tt> routines are invoked during
57         metadata loading to flag that an error has happened.  The
58         class loading errros are flagged in a per-thread basis.
59
60         <P>In various spots in the runtime the
61         <tt>mono_loader_get_last_error</tt> routine is called to check
62         if there was a problem, and then errors are propagated upwards
63         on the stack until we reach a point where an exception can be
64         raised and no runtime locks are held.
65
66         <p>The <tt>mono_loader_error_prepare_exception</tt> takes a
67         <tt>MonoLoaderError</tt> structure (the value returned from
68         <tt>mono_loader_get_last_error</tt>), turns that into an
69         exception and clears the error condition from the current
70         thread. 
71         
72 <h4><a name="api:mono_loader_set_error_field_load">mono_loader_set_error_field_load</a></h4>
73 <h4><a name="api:mono_loader_set_error_method_load">mono_loader_set_error_method_load</a></h4>
74 <h4><a name="api:mono_loader_set_error_type_load">mono_loader_set_error_type_load</a></h4>
75
76 <h4><a name="api:mono_loader_get_last_error">mono_loader_get_last_error</a></h4>
77 <h4><a name="api:mono_loader_clear_error">mono_loader_clear_error</a></h4>
78 <h4><a name="api:mono_loader_error_prepare_exception">mono_loader_error_prepare_exception</a></h4>
79
80 <h2>Metadata Loader Locking: Internals</h2>
81
82         <p>The locking functions here are used by code in class.c and
83         metadata.c to lock access to the shared hashtables inside the
84         MonoImage.
85         
86 <h4><a name="api:mono_loader_lock">mono_loader_lock</a></h4>
87 <h4><a name="api:mono_loader_unlock">mono_loader_unlock</a></h4>
88
89 <h2>Garbage Collector Internal Interface</h2>
90
91         <p>The internal interface of the Mono GC is the interface used
92         between the runtime engine and the garbage collector.
93         
94 <h4><a name="api:mono_gc_disable">mono_gc_disable</a></h4>
95 <h4><a name="api:mono_gc_enable">mono_gc_enable</a></h4>
96 <h4><a name="api:mono_gc_start_world">mono_gc_start_world</a></h4>
97 <h4><a name="api:mono_gc_stop_world">mono_gc_stop_world</a></h4>
98 <h4><a name="api:mono_gc_alloc_fixed">mono_gc_alloc_fixed</a></h4> 
99 <h4><a name="api:mono_gc_free_fixed">mono_gc_free_fixed</a></h4> 
100 <h4><a name="api:mono_gc_make_descr_from_bitmap">mono_gc_make_descr_from_bitmap</a></h4> 
101
102
103 <h4><a name="api:mono_gc_base_init">mono_gc_base_init</a></h4>
104 <h4><a name="api:mono_gc_invoke_finalizers">mono_gc_invoke_finalizers</a></h4>
105 <h4><a name="api:mono_gc_is_gc_thread">mono_gc_is_gc_thread</a></h4>
106 <h4><a name="api:mono_gc_pending_finalizers">mono_gc_pending_finalizers</a></h4>
107 <h4><a name="api:mono_gc_register_thread">mono_gc_register_thread</a></h4>
108 <h4><a name="api:mono_gc_finalize_notify">mono_gc_finalize_notify</a></h4>
109
110
111