| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- #include <mono/jit/jit.h>
- /*
- * Very simple mono embedding example.
- * This sample shows how to access metadata elements from an image.
- * Compile with:
- * gcc -o test-metadata test-metadata.c `pkg-config --cflags --libs mono` -lm
- * Run with:
- * ./test-metadata namespace name
- */
- void
- output_desc (MonoClass* klass) {
- printf ("Class name: %s.%s\n", mono_class_get_namespace (klass), mono_class_get_name (klass));
- printf ("Rank: %d, flags 0x%0x\n", mono_class_get_rank (klass), mono_class_get_flags (klass));
- }
- void
- output_ifaces (MonoClass* klass) {
- MonoClass *iface;
- gpointer iter = NULL;
-
- printf ("Implements: ");
- while ((iface = mono_class_get_interfaces (klass, &iter))) {
- printf ("%s ", mono_class_get_name (iface));
- }
- printf ("\n");
- }
- void
- output_nested (MonoClass* klass) {
- MonoClass *nested;
- gpointer iter = NULL;
-
- printf ("Has nested types: ");
- while ((nested = mono_class_get_nested_types (klass, &iter))) {
- printf ("%s ", mono_class_get_name (nested));
- }
- printf ("\n");
- }
- void
- output_fields (MonoClass* klass) {
- MonoClassField *field;
- gpointer iter = NULL;
-
- while ((field = mono_class_get_fields (klass, &iter))) {
- printf ("Field: %s, flags 0x%x\n", mono_field_get_name (field),
- mono_field_get_flags (field));
- }
- }
- void
- output_methods (MonoClass* klass) {
- MonoMethod *method;
- gpointer iter = NULL;
-
- while ((method = mono_class_get_methods (klass, &iter))) {
- guint32 flags, iflags;
- flags = mono_method_get_flags (method, &iflags);
- printf ("Method: %s, flags 0x%x, iflags 0x%x\n",
- mono_method_get_name (method), flags, iflags);
- }
- }
- void
- output_properties (MonoClass* klass) {
- MonoProperty *prop;
- gpointer iter = NULL;
-
- while ((prop = mono_class_get_properties (klass, &iter))) {
- printf ("Property: %s, flags 0x%x\n", mono_property_get_name (prop),
- mono_property_get_flags (prop));
- }
- }
- void
- output_events (MonoClass* klass) {
- MonoEvent *event;
- gpointer iter = NULL;
-
- while ((event = mono_class_get_events (klass, &iter))) {
- printf ("Event: %s, flags: 0x%x\n", mono_event_get_name (event),
- mono_event_get_flags (event));
- }
- }
- int
- main (int argc, char* argv[]) {
- MonoDomain *domain;
- MonoClass *klass;
- MonoImage *image;
- const char *ns, *name;
-
- if (argc < 3){
- fprintf (stderr, "Please provide namespace and name of a type in mscorlib.\n");
- return 1;
- }
- ns = argv [1];
- name = argv [2];
- /*
- * mono_jit_init() creates a domain: each assembly is
- * loaded and run in a MonoDomain.
- */
- domain = mono_jit_init (argv [0]);
- if (argc > 3) {
- MonoImageOpenStatus status;
- image = mono_image_open (argv [3], &status);
- if (!image) {
- fprintf (stderr, "Can't load assembly \"%s\".\n", argv [3]);
- return 1;
- }
- } else {
- /* we default to using mscorlib */
- image = mono_get_corlib ();
- }
- klass = mono_class_from_name (image, ns, name);
- if (!klass) {
- fprintf (stderr, "Class \"%s.%s\" not found.\n", ns, name);
- return 1;
- }
- output_desc (klass);
- output_ifaces (klass);
- output_nested (klass);
- output_fields (klass);
- output_methods (klass);
- output_properties (klass);
- output_events (klass);
- mono_jit_cleanup (domain);
- return 0;
- }
|