[Mono-dev] Iterating the classes of a mono image using the embedding API

Robert Jordan robertj at gmx.net
Tue Dec 5 19:17:03 EST 2006


Argiris Kirtzidis wrote:
> On 12/05/06 Paolo Molaro wrote:
> 
> I> terating the TypeDef table and calling mono_class_get () is the
> way to
>> go (I posted mostly the same sample code to a mono list a while
>> ago).
> 
> Is there any chance an iterator function (like the
> 'mono_class_get_methods') gets added to the embedding API, so that
> you don't have to deal with internal stuff ? (thus not worry about
> your program breaking with a future version of Mono runtime)

I also thought that these functions and defines were internal,
but they aren't. Since the Mono API is quite stable, you don't need
to worry.

Anyway, here is the interator I'm using.

Robert

/*
  * Iterator routine for retrieving the classes of an assembly.
  * Similar to mono_class_get_{methods|fields|events|...}.
  */
MonoClass*
mono_image_get_classes (MonoImage *image, gpointer *iter)
{
	int num_types;
	int *index;

	if (!iter)
		return NULL;

	index = (int *) iter;

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

	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