[Mono-dev] Embedding (iterating over assembly/image types)

Robert Jordan robertj at gmx.net
Tue Nov 25 13:25:34 EST 2008


Hey,

MWheeler wrote:
> Hey all,
> 
> I've been doing a bit of work with embedding mono into a game engine, and
> I'm yet to find a way (without using reflection 'inside' of C#/whatever) to
> iterate over all types in an assembly/image...  There's no reference to
> doing this in the documentation, and searching through the mini/metadata
> headers didn't unearth anything interesting.
> 
> Is this supported by the mono API at present?

I wrote the following function for this purpose. It has the
same enumerator semantics like mono_class_get_methods.

#include <glib.h>
#include <mono/metadata/image.h>
#include <mono/metadata/assembly.h>
#include <mono/metadata/class.h>
#include <mono/metadata/tokentype.h>

/*
  * Enumerates the classes of the specified assembly.
  * Similar to mono_class_get_{methods|fields|events|...}.
  */
MonoClass*
mono_assembly_get_classes (MonoAssembly *assembly, gpointer *iter)
{
	MonoImage *image;
	int num_types;
	gssize *index;

	if (!iter)
		return NULL;

	index = (gssize *) iter;

	/* skip the <Module> */
	if (!*index)
		*index = 1;

	image = mono_assembly_get_image (assembly);
	num_types = mono_image_get_table_rows (image, MONO_TABLE_TYPEDEF);

	if (*index < num_types) {
		(*index)++;
		return mono_class_get (image, *index | MONO_TOKEN_TYPE_DEF);
	} else {
		*index = 0;
		return NULL;
	}
}


Robert



More information about the Mono-devel-list mailing list