2016-01-18 21:29:19 -05:00
<?xml version="1.0" encoding="utf-8"?> < span >
2015-04-26 19:10:23 +01:00
< html xmlns = "http://www.w3.org/1999/xhtml" >
< head >
< title > mono-api-object.html< / title >
< style type = "text/css" >
h3 {
font-size: 18px;
padding-bottom: 4pt;
border-bottom: 2px solid #dddddd;
}
.api {
border: 1px solid;
padding: 10pt;
margin: 10pt;
}
.api-entry {
border-bottom: none;
font-size: 18px;
}
.prototype {
border: 1px solid;
background-color: #f2f2f2;
padding: 5pt;
margin-top: 5pt;
margin-bottom: 5pt;
}
.header {
border: 1px solid;
padding: 0 0 5pt 5pt;
margin: 10pt;
white-space: pre;
font-family: monospace;
}
.code {
border: 1px solid;
padding: 0 0 5pt 5pt;
margin: 10pt;
white-space: pre;
font-family: monospace;
}
< / style >
< / head >
< body >
< h1 > Object API< / h1 >
< p / > The object API deals with all the operations shared by
< a href = "#objects" > objects< / a > , < a href = "#valuetypes" > value
types< / a > , < a href = "#arrays" > arrays< / a > .
< p / > The object API has methods for accessing < a href = "#fields" > fields< / a > , < a href = "#properties" > properties< / a > , < a href = "#events" > events< / a > , < a href = "#delegates" > delegates< / a > .
< p / > There are some advanced uses that are useful to document
here dealing with < a href = "#remote" > remote fields< / a > .
< h2 > Synopsis< / h2 >
< div class = "header" >
#include < metadata/object.h>
typedef struct MonoVTable MonoVTable;
typedef struct _MonoThreadsSync MonoThreadsSync;
typedef struct {
MonoVTable *vtable;
MonoThreadsSync *synchronisation;
} MonoObject;
typedef struct {
guint32 length;
guint32 lower_bound;
} MonoArrayBounds;
typedef struct {
MonoObject obj;
/* bounds is NULL for szarrays */
MonoArrayBounds *bounds;
/* total number of elements of the array */
guint32 max_length;
/* we use double to ensure proper alignment on platforms that need it */
double vector [MONO_ZERO_LEN_ARRAY];
} MonoArray;
MonoObject* < a href = "#api:mono_object_new" > mono_object_new< / a > (MonoDomain *domain,
MonoClass *klass);
< a href = "#api:mono_object_new_alloc_specific" > < / a >
< a href = "#api:mono_object_new_fast" > < / a >
MonoObject* < a href = "#api:mono_object_new_from_token" > mono_object_new_from_token< / a > (MonoDomain *domain,
MonoImage *image,
guint32 token);
MonoObject* < a href = "#api:mono_object_new_specific" > mono_object_new_specific< / a > (MonoVTable *vtable);
MonoObject* < a href = "#api:mono_object_clone" > mono_object_clone< / a > (MonoObject *obj);
MonoClass* < a href = "#api:mono_object_get_class" > mono_object_get_class< / a > (MonoObject *obj);
MonoDomain* < a href = "#api:mono_object_get_domain" > mono_object_get_domain< / a > (MonoObject *obj);
MonoMethod* < a href = "#api:mono_object_get_virtual_method" > mono_object_get_virtual_method< / a > (MonoObject *obj,
MonoMethod *method);
< a href = "#api:mono_object_isinst_mbyref" > < / a >
MonoObject* < a href = "#api:mono_object_isinst" > mono_object_isinst< / a > (MonoObject *obj,
MonoClass *klass);
gpointer < a href = "#api:mono_object_unbox" > mono_object_unbox< / a > (MonoObject *obj);
MonoObject* < a href = "#api:mono_object_castclass_mbyref" > mono_object_castclass_mbyref< / a > (MonoObject *obj,
MonoClass *klass);
guint < a href = "#api:mono_object_get_size" > mono_object_get_size< / a > (MonoObject* o);
MonoObject* < a href = "#api:mono_value_box" > mono_value_box< / a > (MonoDomain *domain,
MonoClass *class,
gpointer value);
< a href = "#api:mono_value_copy" > < / a >
< a href = "#api:mono_value_copy_array" > < / a >
MonoArray* < a href = "#api:mono_array_new" > mono_array_new< / a > (MonoDomain *domain,
MonoClass *eclass,
uintptr_t n);
MonoArray* < a href = "#api:mono_array_new_full" > mono_array_new_full< / a > (MonoDomain *domain,
MonoClass *array_class,
uintptr_t *lengths,
intptr_t *lower_bounds);
MonoArray* < a href = "#api:mono_array_new_specific" > mono_array_new_specific< / a > (MonoVTable *vtable,
uintptr_t n);
MonoClass* < a href = "#api:mono_array_class_get" > mono_array_class_get< / a > (MonoClass *eclass,
guint32 rank);
MonoArray* < a href = "#api:mono_array_clone" > mono_array_clone< / a > (MonoArray *array);
< a href = "#api:mono_array_set" > < / a >
< a href = "#api:mono_array_setref" > < / a >
uintptr_t < a href = "#api:mono_array_length" > mono_array_length< / a > (MonoArray *array);
< a href = "#api:mono_array_addr" > < / a >
char* < a href = "#api:mono_array_addr_with_size" > mono_array_addr_with_size< / a > (MonoArray *array,
int size,
uintptr_t idx);
< a href = "#api:mono_array_get" > < / a >
gint32 < a href = "#api:mono_array_element_size" > mono_array_element_size< / a > (MonoClass *ac);
< a href = "#api:mono_field_from_token" > < / a >
< a href = "#api:mono_field_get_flags" > < / a >
const char* < a href = "#api:mono_field_get_name" > mono_field_get_name< / a > (MonoClassField *field);
MonoClass* < a href = "#api:mono_field_get_parent" > mono_field_get_parent< / a > (MonoClassField *field);
MonoType* < a href = "#api:mono_field_get_type" > mono_field_get_type< / a > (MonoClassField *field);
void < a href = "#api:mono_field_get_value" > mono_field_get_value< / a > (MonoObject *obj,
MonoClassField *field,
void *value);
MonoObject* < a href = "#api:mono_field_get_value_object" > mono_field_get_value_object< / a > (MonoDomain *domain,
MonoClassField *field,
MonoObject *obj);
void < a href = "#api:mono_field_set_value" > mono_field_set_value< / a > (MonoObject *obj,
MonoClassField *field,
void *value);
void < a href = "#api:mono_field_static_get_value" > mono_field_static_get_value< / a > (MonoVTable *vt,
MonoClassField *field,
void *value);
void < a href = "#api:mono_field_static_set_value" > mono_field_static_set_value< / a > (MonoVTable *vt,
MonoClassField *field,
void *value);
< a href = "#api:mono_field_get_object" > < / a >
< a href = "#api:mono_property_get_object" > < / a >
guint32 < a href = "#api:mono_property_get_flags" > mono_property_get_flags< / a > (MonoProperty *prop);
MonoMethod* < a href = "#api:mono_property_get_get_method" > mono_property_get_get_method< / a > (MonoProperty *prop);
< a href = "#api:mono_property_get_name" > < / a >
MonoClass* < a href = "#api:mono_property_get_parent" > mono_property_get_parent< / a > (MonoProperty *prop);
MonoMethod* < a href = "#api:mono_property_get_set_method" > mono_property_get_set_method< / a > (MonoProperty *prop);
MonoObject* < a href = "#api:mono_property_get_value" > mono_property_get_value< / a > (MonoProperty *prop,
void *obj,
void **params,
MonoObject **exc);
void < a href = "#api:mono_property_set_value" > mono_property_set_value< / a > (MonoProperty *prop,
void *obj,
void **params,
MonoObject **exc);
< a href = "#api:mono_event_get_object" > < / a >
MonoMethod* < a href = "#api:mono_event_get_add_method" > mono_event_get_add_method< / a > (MonoEvent *event);
guint32 < a href = "#api:mono_event_get_flags" > mono_event_get_flags< / a > (MonoEvent *event);
const char* < a href = "#api:mono_event_get_name" > mono_event_get_name< / a > (MonoEvent *event);
MonoClass* < a href = "#api:mono_event_get_parent" > mono_event_get_parent< / a > (MonoEvent *event);
MonoMethod* < a href = "#api:mono_event_get_raise_method" > mono_event_get_raise_method< / a > (MonoEvent *event);
MonoMethod* < a href = "#api:mono_event_get_remove_method" > mono_event_get_remove_method< / a > (MonoEvent *event);
gpointer < a href = "#api:mono_load_remote_field" > mono_load_remote_field< / a > (MonoObject *this,
MonoClass *klass,
MonoClassField *field,
gpointer *res);
MonoObject* < a href = "#api:mono_load_remote_field_new" > mono_load_remote_field_new< / a > (MonoObject *this,
MonoClass *klass,
MonoClassField *field);
void < a href = "#api:mono_store_remote_field" > mono_store_remote_field< / a > (MonoObject *this,
MonoClass *klass,
MonoClassField *field,
gpointer val);
void < a href = "#api:mono_store_remote_field_new" > mono_store_remote_field_new< / a > (MonoObject *this,
MonoClass *klass,
MonoClassField *field,
MonoObject *arg);
< / div >
< p / > MonoObject is the base definition for all managed objects
in the Mono runtime, it represents the < a href = "http://www.mono-project.com/monodoc/T:System.Object" > System.Object< / a >
managed type.
< p / > All objects that derive from < a href = "http://www.mono-project.com/monodoc/T:System.Object" > System.Object< / a >
do have this base definition. Derived objects are declared
following the pattern where the parent class is the first
field of a structure definition, for example:
< div class = "code" >
typedef struct {
MonoObject parent;
int my_new_field;
} MyNewObject
< / div >
< a name = "objects" > < / a >
< h2 > Core Object Methods< / h2 >
< a name = "api:mono_object_new" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_object_new< / div >
< div class = "prototype" > MonoObject*
mono_object_new (MonoDomain *domain, MonoClass *klass)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > klass:< / i > < / dt > < dd > the class of the object that we want to create< / dd > < / blockquote >
< b > Returns< / b >
< blockquote > a newly created object whose definition is
looked up using < i > klass< / i > . This will not invoke any constructors,
so the consumer of this routine has to invoke any constructors on
its own to initialize the object.
< p / >
It returns NULL on failure.< / blockquote >
< p / > For example, if you wanted to create an object of type
System.Version, you would use a piece of code like this:
< div class = "code" >
MonoClass *version_class;
MonoObject *result;
/* Get the class from mscorlib */
version_class = mono_class_from_name (mono_get_corlib (),
" System" , " Version" );
/* Create an object of that class */
result = mono_object_new (mono_domain_get (), version_class);
< / div >
< / div > < a name = "api:mono_object_new_alloc_specific" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_object_new_alloc_specific< / div >
< div class = "prototype" > Prototype: mono_object_new_alloc_specific< / div >
< p / >
< / div > < a name = "api:mono_object_new_fast" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_object_new_fast< / div >
< div class = "prototype" > Prototype: mono_object_new_fast< / div >
< p / >
< / div > < a name = "api:mono_object_new_from_token" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_object_new_from_token< / div >
< div class = "prototype" > MonoObject*
mono_object_new_from_token (MonoDomain *domain, MonoImage *image, guint32 token)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > image:< / i > < / dt > < dd > Context where the type_token is hosted< / dd > < dt > < i > token:< / i > < / dt > < dd > a token of the type that we want to create< / dd > < / blockquote >
< b > Returns< / b >
< blockquote > A newly created object whose definition is
looked up using < i > token< / i > in the < i > image< / i > image< / blockquote >
< / div > < a name = "api:mono_object_new_specific" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_object_new_specific< / div >
< div class = "prototype" > MonoObject*
mono_object_new_specific (MonoVTable *vtable)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > vtable:< / i > < / dt > < dd > the vtable of the object that we want to create< / dd > < / blockquote >
< b > Returns< / b >
< blockquote > A newly created object with class and domain specified
by < i > vtable< / i > < / blockquote >
< / div > < a name = "api:mono_object_clone" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_object_clone< / div >
< div class = "prototype" > MonoObject*
mono_object_clone (MonoObject *obj)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > obj:< / i > < / dt > < dd > the object to clone< / dd > < / blockquote >
< b > Returns< / b >
< blockquote > A newly created object who is a shallow copy of < i > obj< / i >
< / blockquote >
< / div > < a name = "api:mono_object_get_class" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_object_get_class< / div >
< div class = "prototype" > MonoClass*
mono_object_get_class (MonoObject *obj)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > obj:< / i > < / dt > < dd > object to query< / dd > < / blockquote >
< b > Returns< / b >
< blockquote > the MonOClass of the object.
< / blockquote >
< b > Remarks< / b >
< p / > < p / >
< / div > < a name = "api:mono_object_get_domain" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_object_get_domain< / div >
< div class = "prototype" > MonoDomain*
mono_object_get_domain (MonoObject *obj)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > obj:< / i > < / dt > < dd > object to query< / dd > < / blockquote >
< b > Returns< / b >
< blockquote > the MonoDomain where the object is hosted
< / blockquote >
< b > Remarks< / b >
< p / > < p / >
< / div > < a name = "api:mono_object_get_virtual_method" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_object_get_virtual_method< / div >
< div class = "prototype" > MonoMethod*
mono_object_get_virtual_method (MonoObject *obj, MonoMethod *method)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > obj:< / i > < / dt > < dd > object to operate on.< / dd > < dt > < i > method:< / i > < / dt > < dd > method < / dd > < / blockquote >
< b > Remarks< / b >
< p / >
Retrieves the MonoMethod that would be called on obj if obj is passed as
the instance of a callvirt of method.
< / div > < a name = "api:mono_object_isinst_mbyref" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_object_isinst_mbyref< / div >
< div class = "prototype" > Prototype: mono_object_isinst_mbyref< / div >
< p / >
< / div > < a name = "api:mono_object_isinst" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_object_isinst< / div >
< div class = "prototype" > MonoObject*
mono_object_isinst (MonoObject *obj, MonoClass *klass)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > obj:< / i > < / dt > < dd > an object< / dd > < dt > < i > klass:< / i > < / dt > < dd > a pointer to a class < / dd > < / blockquote >
< b > Returns< / b >
< blockquote > < i > obj< / i > if < i > obj< / i > is derived from < i > klass< / i >
< / blockquote >
< / div > < a name = "api:mono_object_unbox" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_object_unbox< / div >
< div class = "prototype" > gpointer
mono_object_unbox (MonoObject *obj)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > obj:< / i > < / dt > < dd > object to unbox< / dd > < / blockquote >
< b > Returns< / b >
< blockquote > a pointer to the start of the valuetype boxed in this
object.
This method will assert if the object passed is not a valuetype.< / blockquote >
< b > Remarks< / b >
< p / > < p / >
< / div > < a name = "api:mono_object_castclass_mbyref" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_object_castclass_mbyref< / div >
< div class = "prototype" > MonoObject*
mono_object_castclass_mbyref (MonoObject *obj, MonoClass *klass)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > obj:< / i > < / dt > < dd > an object< / dd > < dt > < i > klass:< / i > < / dt > < dd > a pointer to a class < / dd > < / blockquote >
< b > Returns< / b >
< blockquote > < i > obj< / i > if < i > obj< / i > is derived from < i > klass< / i > , throws an exception otherwise
< / blockquote >
< / div > < a name = "api:mono_object_get_size" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_object_get_size< / div >
< div class = "prototype" > guint
mono_object_get_size (MonoObject* o)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > o:< / i > < / dt > < dd > object to query< / dd > < / blockquote >
< b > Returns< / b >
< blockquote > the size, in bytes, of < i > o< / i >
< / blockquote >
< b > Remarks< / b >
< p / > < p / >
< a name = "valuetypes" > < / a >
< / div > < h2 > Value Types< / h2 >
< a name = "api:mono_value_box" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_value_box< / div >
< div class = "prototype" > MonoObject*
mono_value_box (MonoDomain *domain, MonoClass *class, gpointer value)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > class:< / i > < / dt > < dd > the class of the value< / dd > < dt > < i > value:< / i > < / dt > < dd > a pointer to the unboxed data< / dd > < / blockquote >
< b > Returns< / b >
< blockquote > A newly created object which contains < i > value< / i > .
< / blockquote >
< / div > < a name = "api:mono_value_copy" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_value_copy< / div >
< div class = "prototype" > Prototype: mono_value_copy< / div >
< p / >
< / div > < a name = "api:mono_value_copy_array" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_value_copy_array< / div >
< div class = "prototype" > Prototype: mono_value_copy_array< / div >
< p / >
< a name = "arrays" > < / a >
< / div > < h2 > Array Methods< / h2 >
< p / > Use the < tt > mono_array_new_*< / tt > methods to create arrays
of a given type.
< p / > For example, the following code creates an array with two
elements of type < tt > System.Byte< / tt > , and sets the values
0xca and 0xfe on it:
< pre class = "code" >
MonoArray *CreateByteArray (MonoDomain *domain)
{
MonoArray *data;
data = mono_array_new (domain, mono_get_byte_class (), 2);
mono_array_set (data, guint8, 0, 0xca);
mono_array_set (data, guint8, 0, 0xfe);
return data;
}
< / pre >
< h3 > Creating Arrays< / h3 >
< a name = "api:mono_array_new" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_array_new< / div >
< div class = "prototype" > MonoArray*
mono_array_new (MonoDomain *domain, MonoClass *eclass, uintptr_t n)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > domain:< / i > < / dt > < dd > domain where the object is created< / dd > < dt > < i > eclass:< / i > < / dt > < dd > element class< / dd > < dt > < i > n:< / i > < / dt > < dd > number of array elements< / dd > < / blockquote >
< b > Remarks< / b >
< p / >
This routine creates a new szarray with < i > n< / i > elements of type < i > eclass< / i > .
< / div > < a name = "api:mono_array_new_full" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_array_new_full< / div >
< div class = "prototype" > MonoArray*
mono_array_new_full (MonoDomain *domain, MonoClass *array_class, uintptr_t *lengths, intptr_t *lower_bounds)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > domain:< / i > < / dt > < dd > domain where the object is created< / dd > < dt > < i > array_class:< / i > < / dt > < dd > array class< / dd > < dt > < i > lengths:< / i > < / dt > < dd > lengths for each dimension in the array< / dd > < dt > < i > lower_bounds:< / i > < / dt > < dd > lower bounds for each dimension in the array (may be NULL)< / dd > < / blockquote >
< b > Remarks< / b >
< p / >
This routine creates a new array objects with the given dimensions,
lower bounds and type.
< / div > < a name = "api:mono_array_new_specific" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_array_new_specific< / div >
< div class = "prototype" > MonoArray*
mono_array_new_specific (MonoVTable *vtable, uintptr_t n)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > vtable:< / i > < / dt > < dd > a vtable in the appropriate domain for an initialized class< / dd > < dt > < i > n:< / i > < / dt > < dd > number of array elements< / dd > < / blockquote >
< b > Remarks< / b >
< p / >
This routine is a fast alternative to mono_array_new() for code which
can be sure about the domain it operates in.
< / div > < a name = "api:mono_array_class_get" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_array_class_get< / div >
< div class = "prototype" > MonoClass*
mono_array_class_get (MonoClass *eclass, guint32 rank)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > element_class:< / i > < / dt > < dd > element class < / dd > < dt > < i > rank:< / i > < / dt > < dd > the dimension of the array class< / dd > < / blockquote >
< b > Returns< / b >
< blockquote > a class object describing the array with element type < i > element_type< / i > and
dimension < i > rank< / i > . < / blockquote >
< / div > < a name = "api:mono_array_clone" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_array_clone< / div >
< div class = "prototype" > MonoArray*
mono_array_clone (MonoArray *array)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > array:< / i > < / dt > < dd > the array to clone< / dd > < / blockquote >
< b > Returns< / b >
< blockquote > A newly created array who is a shallow copy of < i > array< / i >
< / blockquote >
< / div > < h3 > Using Arrays< / h3 >
< a name = "api:mono_array_set" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_array_set< / div >
< div class = "prototype" > Prototype: mono_array_set< / div >
< p / >
< / div > < a name = "api:mono_array_setref" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_array_setref< / div >
< div class = "prototype" > Prototype: mono_array_setref< / div >
< p / >
< / div > < a name = "api:mono_array_length" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_array_length< / div >
< div class = "prototype" > uintptr_t
mono_array_length (MonoArray *array)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > array:< / i > < / dt > < dd > a MonoArray*< / dd > < / blockquote >
< b > Remarks< / b >
< p / >
Returns the total number of elements in the array. This works for
both vectors and multidimensional arrays.
< / div > < a name = "api:mono_array_addr" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_array_addr< / div >
< div class = "prototype" > Prototype: mono_array_addr< / div >
< p / >
< / div > < a name = "api:mono_array_addr_with_size" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_array_addr_with_size< / div >
< div class = "prototype" > char*
mono_array_addr_with_size (MonoArray *array, int size, uintptr_t idx)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > array:< / i > < / dt > < dd > a MonoArray*< / dd > < dt > < i > size:< / i > < / dt > < dd > size of the array elements< / dd > < dt > < i > idx:< / i > < / dt > < dd > index into the array< / dd > < / blockquote >
< b > Remarks< / b >
< p / >
Returns the address of the < i > idx< / i > element in the array.
< / div > < a name = "api:mono_array_get" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_array_get< / div >
< div class = "prototype" > Prototype: mono_array_get< / div >
< p / >
< / div > < a name = "api:mono_array_element_size" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_array_element_size< / div >
< div class = "prototype" > gint32
mono_array_element_size (MonoClass *ac)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > ac:< / i > < / dt > < dd > pointer to a #MonoArrayClass< / dd > < / blockquote >
< b > Returns< / b >
< blockquote > the size of single array element.
< / blockquote >
< a name = "fields" > < / a >
< / div > < h2 > Fields< / h2 >
< a name = "api:mono_field_from_token" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_field_from_token< / div >
< div class = "prototype" > Prototype: mono_field_from_token< / div >
< p / >
< / div > < a name = "api:mono_field_get_flags" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_field_get_flags< / div >
< div class = "prototype" > Prototype: mono_field_get_flags< / div >
< p / >
< / div > < a name = "api:mono_field_get_name" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_field_get_name< / div >
< div class = "prototype" > const char*
mono_field_get_name (MonoClassField *field)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > field:< / i > < / dt > < dd > the MonoClassField to act on< / dd > < / blockquote >
< b > Returns< / b >
< blockquote > the name of the field.
< / blockquote >
< / div > < a name = "api:mono_field_get_parent" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_field_get_parent< / div >
< div class = "prototype" > MonoClass*
mono_field_get_parent (MonoClassField *field)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > field:< / i > < / dt > < dd > the MonoClassField to act on< / dd > < / blockquote >
< b > Returns< / b >
< blockquote > MonoClass where the field was defined.
< / blockquote >
< / div > < a name = "api:mono_field_get_type" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_field_get_type< / div >
< div class = "prototype" > MonoType*
mono_field_get_type (MonoClassField *field)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > field:< / i > < / dt > < dd > the MonoClassField to act on< / dd > < / blockquote >
< b > Returns< / b >
< blockquote > MonoType of the field.
< / blockquote >
< / div > < a name = "api:mono_field_get_value" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_field_get_value< / div >
< div class = "prototype" > void
mono_field_get_value (MonoObject *obj, MonoClassField *field, void *value)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > obj:< / i > < / dt > < dd > Object instance< / dd > < dt > < i > field:< / i > < / dt > < dd > MonoClassField describing the field to fetch information from< / dd > < dt > < i > value:< / i > < / dt > < dd > pointer to the location where the value will be stored< / dd > < / blockquote >
< b > Remarks< / b >
< p / >
Use this routine to get the value of the field < i > field< / i > in the object
passed.
The pointer provided by value must be of the field type, for reference
types this is a MonoObject*, for value types its the actual pointer to
the value type.
For example:
int i;
mono_field_get_value (obj, int_field, & i);
< / div > < a name = "api:mono_field_get_value_object" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_field_get_value_object< / div >
< div class = "prototype" > MonoObject*
mono_field_get_value_object (MonoDomain *domain, MonoClassField *field, MonoObject *obj)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > domain:< / i > < / dt > < dd > domain where the object will be created (if boxing)< / dd > < dt > < i > field:< / i > < / dt > < dd > MonoClassField describing the field to fetch information from< / dd > < dt > < i > obj:< / i > < / dt > < dd > The object instance for the field.< / dd > < / blockquote >
< b > Returns< / b >
< blockquote > a new MonoObject with the value from the given field. If the
field represents a value type, the value is boxed.
< / blockquote >
< / div > < a name = "api:mono_field_set_value" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_field_set_value< / div >
< div class = "prototype" > void
mono_field_set_value (MonoObject *obj, MonoClassField *field, void *value)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > obj:< / i > < / dt > < dd > Instance object< / dd > < dt > < i > field:< / i > < / dt > < dd > MonoClassField describing the field to set< / dd > < dt > < i > value:< / i > < / dt > < dd > The value to be set< / dd > < / blockquote >
< b > Remarks< / b >
< p / >
Sets the value of the field described by < i > field< / i > in the object instance < i > obj< / i >
to the value passed in < i > value< / i > . This method should only be used for instance
fields. For static fields, use mono_field_static_set_value.
The value must be on the native format of the field type.
< / div > < a name = "api:mono_field_static_get_value" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_field_static_get_value< / div >
< div class = "prototype" > void
mono_field_static_get_value (MonoVTable *vt, MonoClassField *field, void *value)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > vt:< / i > < / dt > < dd > vtable to the object< / dd > < dt > < i > field:< / i > < / dt > < dd > MonoClassField describing the field to fetch information from< / dd > < dt > < i > value:< / i > < / dt > < dd > where the value is returned< / dd > < / blockquote >
< b > Remarks< / b >
< p / >
Use this routine to get the value of the static field < i > field< / i > value.
The pointer provided by value must be of the field type, for reference
types this is a MonoObject*, for value types its the actual pointer to
the value type.
For example:
int i;
mono_field_static_get_value (vt, int_field, & i);
< / div > < a name = "api:mono_field_static_set_value" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_field_static_set_value< / div >
< div class = "prototype" > void
mono_field_static_set_value (MonoVTable *vt, MonoClassField *field, void *value)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > field:< / i > < / dt > < dd > MonoClassField describing the field to set< / dd > < dt > < i > value:< / i > < / dt > < dd > The value to be set< / dd > < / blockquote >
< b > Remarks< / b >
< p / >
Sets the value of the static field described by < i > field< / i >
to the value passed in < i > value< / i > .
The value must be on the native format of the field type.
< / div > < a name = "api:mono_field_get_object" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_field_get_object< / div >
< div class = "prototype" > Prototype: mono_field_get_object< / div >
< p / >
< a name = "properties" > < / a >
< / div > < h2 > Properties< / h2 >
< a name = "api:mono_property_get_object" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_property_get_object< / div >
< div class = "prototype" > Prototype: mono_property_get_object< / div >
< p / >
< / div > < a name = "api:mono_property_get_flags" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_property_get_flags< / div >
< div class = "prototype" > guint32
mono_property_get_flags (MonoProperty *prop)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > prop:< / i > < / dt > < dd > the MonoProperty to act on.< / dd > < / blockquote >
< b > Returns< / b >
< blockquote > the flags for the property.
< / blockquote >
< b > Remarks< / b >
< p / >
The metadata flags for a property are encoded using the
PROPERTY_ATTRIBUTE_* constants. See the tabledefs.h file for details.
< / div > < a name = "api:mono_property_get_get_method" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_property_get_get_method< / div >
< div class = "prototype" > MonoMethod*
mono_property_get_get_method (MonoProperty *prop)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > prop:< / i > < / dt > < dd > the MonoProperty to act on.< / dd > < / blockquote >
< b > Returns< / b >
< blockquote > the setter method of the property (A MonoMethod)
< / blockquote >
< / div > < a name = "api:mono_property_get_name" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_property_get_name< / div >
< div class = "prototype" > Prototype: mono_property_get_name< / div >
< p / >
< / div > < a name = "api:mono_property_get_parent" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_property_get_parent< / div >
< div class = "prototype" > MonoClass*
mono_property_get_parent (MonoProperty *prop)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > prop:< / i > < / dt > < dd > the MonoProperty to act on.< / dd > < / blockquote >
< b > Returns< / b >
< blockquote > the MonoClass where the property was defined.
< / blockquote >
< / div > < a name = "api:mono_property_get_set_method" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_property_get_set_method< / div >
< div class = "prototype" > MonoMethod*
mono_property_get_set_method (MonoProperty *prop)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > prop:< / i > < / dt > < dd > the MonoProperty to act on.< / dd > < / blockquote >
< b > Returns< / b >
< blockquote > the setter method of the property (A MonoMethod)
< / blockquote >
< / div > < a name = "api:mono_property_get_value" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_property_get_value< / div >
< div class = "prototype" > MonoObject*
mono_property_get_value (MonoProperty *prop, void *obj, void **params, MonoObject **exc)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > prop:< / i > < / dt > < dd > MonoProperty to fetch< / dd > < dt > < i > obj:< / i > < / dt > < dd > instance object on which to act< / dd > < dt > < i > params:< / i > < / dt > < dd > parameters to pass to the propery< / dd > < dt > < i > exc:< / i > < / dt > < dd > optional exception< / dd > < / blockquote >
< b > Returns< / b >
< blockquote > the value from invoking the get method on the property.
< / blockquote >
< b > Remarks< / b >
< p / >
Invokes the property's get method with the given arguments on the
object instance obj (or NULL for static properties).
< p / >
You can pass NULL as the exc argument if you don't want to
catch exceptions, otherwise, *exc will be set to the exception
thrown, if any. if an exception is thrown, you can't use the
MonoObject* result from the function.
< / div > < a name = "api:mono_property_set_value" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_property_set_value< / div >
< div class = "prototype" > void
mono_property_set_value (MonoProperty *prop, void *obj, void **params, MonoObject **exc)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > prop:< / i > < / dt > < dd > MonoProperty to set< / dd > < dt > < i > obj:< / i > < / dt > < dd > instance object on which to act< / dd > < dt > < i > params:< / i > < / dt > < dd > parameters to pass to the propery< / dd > < dt > < i > exc:< / i > < / dt > < dd > optional exception< / dd > < / blockquote >
< b > Remarks< / b >
< p / >
Invokes the property's set method with the given arguments on the
object instance obj (or NULL for static properties).
< p / >
You can pass NULL as the exc argument if you don't want to
catch exceptions, otherwise, *exc will be set to the exception
thrown, if any. if an exception is thrown, you can't use the
MonoObject* result from the function.
< a name = "events" > < / a >
< / div > < h2 > Events< / h2 >
< a name = "api:mono_event_get_object" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_event_get_object< / div >
< div class = "prototype" > Prototype: mono_event_get_object< / div >
< p / >
< / div > < a name = "api:mono_event_get_add_method" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_event_get_add_method< / div >
< div class = "prototype" > MonoMethod*
mono_event_get_add_method (MonoEvent *event)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > event:< / i > < / dt > < dd > The MonoEvent to act on.< / dd > < / blockquote >
< b > Returns< / b >
< blockquote > the < i > add< / i > ' method for the event (a MonoMethod).
< / blockquote >
< / div > < a name = "api:mono_event_get_flags" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_event_get_flags< / div >
< div class = "prototype" > guint32
mono_event_get_flags (MonoEvent *event)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > event:< / i > < / dt > < dd > the MonoEvent to act on.< / dd > < / blockquote >
< b > Returns< / b >
< blockquote > the flags for the event.
< / blockquote >
< b > Remarks< / b >
< p / >
The metadata flags for an event are encoded using the
EVENT_* constants. See the tabledefs.h file for details.
< / div > < a name = "api:mono_event_get_name" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_event_get_name< / div >
< div class = "prototype" > const char*
mono_event_get_name (MonoEvent *event)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > event:< / i > < / dt > < dd > the MonoEvent to act on< / dd > < / blockquote >
< b > Returns< / b >
< blockquote > the name of the event.
< / blockquote >
< / div > < a name = "api:mono_event_get_parent" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_event_get_parent< / div >
< div class = "prototype" > MonoClass*
mono_event_get_parent (MonoEvent *event)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > event:< / i > < / dt > < dd > the MonoEvent to act on.< / dd > < / blockquote >
< b > Returns< / b >
< blockquote > the MonoClass where the event is defined.
< / blockquote >
< / div > < a name = "api:mono_event_get_raise_method" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_event_get_raise_method< / div >
< div class = "prototype" > MonoMethod*
mono_event_get_raise_method (MonoEvent *event)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > event:< / i > < / dt > < dd > The MonoEvent to act on.< / dd > < / blockquote >
< b > Returns< / b >
< blockquote > the < i > raise< / i > method for the event (a MonoMethod).
< / blockquote >
< / div > < a name = "api:mono_event_get_remove_method" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_event_get_remove_method< / div >
< div class = "prototype" > MonoMethod*
mono_event_get_remove_method (MonoEvent *event)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > event:< / i > < / dt > < dd > The MonoEvent to act on.< / dd > < / blockquote >
< b > Returns< / b >
< blockquote > the < i > remove< / i > method for the event (a MonoMethod).
< / blockquote >
< a name = "remote" > < / a >
< / div > < h2 > Remote Fields< / h2 >
< a name = "api:mono_load_remote_field" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_load_remote_field< / div >
< div class = "prototype" > gpointer
mono_load_remote_field (MonoObject *this, MonoClass *klass, MonoClassField *field, gpointer *res)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > this:< / i > < / dt > < dd > pointer to an object< / dd > < dt > < i > klass:< / i > < / dt > < dd > klass of the object containing < i > field< / i > < / dd > < dt > < i > field:< / i > < / dt > < dd > the field to load< / dd > < dt > < i > res:< / i > < / dt > < dd > a storage to store the result< / dd > < / blockquote >
< b > Returns< / b >
< blockquote > an address pointing to the value of field.
< / blockquote >
< b > Remarks< / b >
< p / >
This method is called by the runtime on attempts to load fields of
transparent proxy objects. < i > this< / i > points to such TP, < i > klass< / i > is the class of
the object containing < i > field< / i > . < i > res< / i > is a storage location which can be
used to store the result.
< / div > < a name = "api:mono_load_remote_field_new" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_load_remote_field_new< / div >
< div class = "prototype" > MonoObject*
mono_load_remote_field_new (MonoObject *this, MonoClass *klass, MonoClassField *field)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > this:< / i > < / dt > < dd > < / dd > < dt > < i > klass:< / i > < / dt > < dd > < / dd > < dt > < i > field:< / i > < / dt > < dd > < / dd > < / blockquote >
< b > Remarks< / b >
< p / >
Missing documentation.
< / div > < a name = "api:mono_store_remote_field" > < / a >
< div class = "api" >
< div class = "api-entry" > mono_store_remote_field< / div >
< div class = "prototype" > void
mono_store_remote_field (MonoObject *this, MonoClass *klass, MonoClassField *field, gpointer val)
< / div >
< p / >
< b > Parameters< / b >
< blockquote > < dt > < i > this:< / i > < / dt > < dd > pointer to an object< / dd > < dt > < i > klass:< / i > < / dt > < dd > klass of the object containing < i > field< / i > < / dd > < dt > < i > field:< / i > < / dt > < dd > the field to load< / dd > < dt > < i > val:< / i > < / dt > < dd > the value/object to store< / dd > < / blockquote >
< b > Remarks< / b >
< p / >
This method is called by the runtime on attempts to store fields of
transparent proxy objects. < i > this< / i > points to such TP, < i > klass< / i > is the class of
the object containing < i > field< / i > . < i > val< / i > is the new value to store in < i > field< / i > .
< / div > < / body >
< / html >
< / span >