예제 #1
0
static gpointer dispatch_callback(SignalData *sig_data, int num_vals, ...)
{
	MonoArray *array;
	MonoObject *obj;
	int i;
	gpointer meth_args[1];
	gpointer purple_obj;
	
	va_list args;
	
	va_start(args, num_vals);
	
	array = mono_array_new(ml_get_domain(), mono_get_object_class(), num_vals);
	
	for (i = 0; i < num_vals; i++) {
		if (purple_value_get_type(sig_data->values[i]) == PURPLE_TYPE_SUBTYPE) {
			purple_obj = va_arg(args, gpointer);
			obj = ml_object_from_purple_subtype(purple_value_get_subtype(sig_data->values[i]), purple_obj);
			mono_array_set(array, MonoObject*, i, obj);
		} else {
			purple_obj = va_arg(args, gpointer);
			obj = ml_object_from_purple_type(purple_value_get_type(sig_data->values[i]), purple_obj);
			mono_array_set(array, MonoObject*, i, obj);
		}
	}
	
	va_end(args);
	
	meth_args[0] = array;
	
	return ml_delegate_invoke(sig_data->func, meth_args);	
}
예제 #2
0
void ml_uninit()
{
	g_return_if_fail(_runtime_active == TRUE);

	mono_jit_cleanup(ml_get_domain());

	ml_set_domain(NULL);

	_runtime_active = FALSE;
}
예제 #3
0
void ml_set_prop_string(MonoObject *obj, char *field, char *data)
{
	MonoClass *klass;
	MonoProperty *prop;
	MonoString *str;
	gpointer args[1];

	klass = mono_object_get_class(obj);

	prop = mono_class_get_property_from_name(klass, field);

	str = mono_string_new(ml_get_domain(), data);

	args[0] = str;

	mono_property_set_value(prop, obj, args, NULL);
}
예제 #4
0
MonoObject* ml_create_api_object(char *class_name)
{
	MonoObject *obj = NULL;
	MonoClass *klass = NULL;

	klass = mono_class_from_name(ml_get_api_image(), "Purple", class_name);
	if (!klass) {
		purple_debug(PURPLE_DEBUG_FATAL, "mono", "couldn't find the '%s' class\n", class_name);
		return NULL;
	}

	obj = mono_object_new(ml_get_domain(), klass);
	if (!obj) {
		purple_debug(PURPLE_DEBUG_FATAL, "mono", "couldn't create the object from class '%s'\n", class_name);
		return NULL;
	}

	mono_runtime_object_init(obj);

	return obj;
}