예제 #1
1
void GDMonoMethod::get_parameter_names(Vector<StringName> &names) const {
	if (params_count > 0) {
		const char **_names = memnew_arr(const char *, params_count);
		mono_method_get_param_names(mono_method, _names);
		for (int i = 0; i < params_count; ++i) {
			names.push_back(StringName(_names[i]));
		}
		memdelete_arr(_names);
	}
}
예제 #2
0
void CPipeServer::GetMethodSignature()
{
	void *method = (void *)ReadQword();
	void *methodsignature = mono_method_signature(method);
	char *sig = mono_signature_get_desc(methodsignature, TRUE);
	int paramcount = mono_signature_get_param_count(methodsignature);
	char **names=(char **)calloc(sizeof(char *), paramcount);

	int i;
	
	mono_method_get_param_names(method, (const char **)names);
	WriteByte(paramcount);
	for (i = 0; i < paramcount; i++)
	{
		if (names[i])
		{
			WriteByte(strlen(names[i]));
			Write(names[i], strlen(names[i]));
		}
		else
			WriteByte(0);
	}

	free(names);

	WriteWord(strlen(sig));
	Write(sig, strlen(sig));
	g_free(sig);	

	//12/5/2014:send the returntype as well
	void *returntype = mono_signature_get_return_type(methodsignature);

	if (returntype)
	{
		char *tname = mono_type_get_name(returntype);
		if (tname)
		{
			WriteByte(strlen(tname));
			Write(tname, strlen(tname));
			g_free(tname);
		}
		else
			WriteByte(0);
	}
	else
		WriteByte(0);
}