示例#1
0
int main(int argc, char* argv[])
{
    fs::path game_dir("C:\\my\\unity\\proj1\\proj1\\build\\1_Data");

    fs::path managed_dir = game_dir / "Managed";
    fs::path mono_dir = game_dir / "Mono";
    fs::path dll_path = mono_dir / "_mono.dll";

    HMODULE dll = LoadLibraryA(dll_path.string().c_str());
    auto f = make_shared<mono_wrapper::functions_t>(mono_wrapper::load_mono_functions_from_dll(dll));

    f->mono_set_dirs(managed_dir.string().c_str(), (game_dir / "Mono/etc").string().c_str());
    
    {
        std::stringstream ss;
        ss << managed_dir.string() << ";" << mono_dir.string();
        f->mono_set_assemblies_path(ss.str().c_str());
    }

    MonoDomain* domain = f->mono_jit_init("My domain");

    auto s = new_String(f, "Hello!");
    auto s1 = s->ToUpper();

    string s1_content = s1->to_utf8();

    int32_t len = s->get_Length();

	return 0;
}
示例#2
0
文件: program.cpp 项目: Babelz/SaNi
int main() {
	/*
		TODO: using abs paths just to test this shit.
	*/

	// Set path where managed assemblies live.
	mono_set_assemblies_path("C:\\Users\\Niko\\Source\\Repos\\SaNi\\vs2013\\sanimono\\SaNi\\bin\\Debug");
	// Set Mono library and configuration paths.
	mono_set_dirs("C:\\Program Files (x86)\\Mono\\lib", "C:\\Program Files (x86)\\Mono\\etc");

	// Our application assembly that contains 
	// the code we are going to run.
	domain = mono_jit_init_version("SaNi", "v4.0.30319");
	
	// Our domain in which the code will be 
	// executed.
	MonoAssembly* assembly = mono_domain_assembly_open(domain, "C:\\Users\\Niko\\Source\\Repos\\SaNi\\vs2013\\sanimono\\SaNi\\bin\\Debug\\SaNi.exe");

	if (!assembly) throw std::runtime_error("could not load the given Mono assembly");

	mono_add_internal_call("SaNi.Utils::Print(string)", (void*)print);
	mono_add_internal_call("SaNi.Utils::GetString()", (void*)getString);

	const auto argc = 6;
	char* argv[argc] = { "HELLO", "WORLD", "FROM", "THE", "F*****G", "MONO" };

	mono_jit_exec(domain, assembly, argc, argv);

	// Clean mono.
	mono_jit_cleanup(domain);

	return 0;
}
示例#3
0
int
main (void)
{
	int res = 0;
	MonoDomain *domain = NULL;
	MonoAssembly *assembly = NULL;
	MonoImage *prog_image = NULL;
	MonoImage *corlib = NULL;
	MonoClass *prog_klass, *console_klass;
	MonoMethod *meth;
	MonoImageOpenStatus status;

	//FIXME This is a fugly hack due to embedding simply not working from the tree
	mono_set_assemblies_path ("../../mcs/class/lib/net_4_x");

	test_methods = g_array_new (FALSE, TRUE, sizeof (MonoMethod *));
	if (!test_methods) {
		res = 1;
		printf ("FAILED INITIALIZING METHODS ARRAY\n");
		goto out;
	}

	domain = mono_jit_init_version ("TEST RUNNER", "mobile");
	assembly = mono_assembly_open (TESTPROG, &status);
	if (!domain || !assembly) {
		res = 1;
		printf("FAILED LOADING TEST PROGRAM\n");
		goto out;
	}

	mono_callspec_set_assembly(assembly);

	prog_image = mono_assembly_get_image (assembly);

	prog_klass = test_mono_class_from_name (prog_image, "Baz", "Foo");
	if (!prog_klass) {
		res = 1;
		printf ("FAILED FINDING Baz.Foo\n");
		goto out;
	}
	meth = mono_class_get_method_from_name (prog_klass, "Bar", 0);
	if (!meth) {
		res = 1;
		printf ("FAILED FINDING Baz.Foo:Bar ()\n");
		goto out;
	}
	g_array_append_val (test_methods, meth);
	meth = mono_class_get_method_from_name (prog_klass, "Bar", 1);
	if (!meth) {
		res = 1;
		printf ("FAILED FINDING Baz.Foo:Bar (string)\n");
		goto out;
	}
	g_array_append_val (test_methods, meth);

	prog_klass = test_mono_class_from_name (prog_image, "Baz", "Goo");
	if (!prog_klass) {
		res = 1;
		printf ("FAILED FINDING Baz.Goo\n");
		goto out;
	}
	meth = mono_class_get_method_from_name (prog_klass, "Bar", 1);
	if (!meth) {
		res = 1;
		printf ("FAILED FINDING Baz.Goo:Bar (string)\n");
		goto out;
	}
	g_array_append_val (test_methods, meth);

	prog_klass = test_mono_class_from_name (prog_image, "Baz", "Foo2");
	if (!prog_klass) {
		res = 1;
		printf ("FAILED FINDING Baz.Foo2\n");
		goto out;
	}
	meth = mono_class_get_method_from_name (prog_klass, "Bar", 1);
	if (!meth) {
		res = 1;
		printf ("FAILED FINDING Baz.Foo2:Bar (string)\n");
		goto out;
	}
	g_array_append_val (test_methods, meth);

	corlib = mono_get_corlib ();

	console_klass = test_mono_class_from_name (corlib, "System", "Console");
	if (!console_klass) {
		res = 1;
		printf ("FAILED FINDING System.Console\n");
		goto out;
	}
	meth = mono_class_get_method_from_name (console_klass, "WriteLine", 1);
	if (!meth) {
		res = 1;
		printf ("FAILED FINDING System.Console:WriteLine\n");
		goto out;
	}
	g_array_append_val (test_methods, meth);

	res = test_all_callspecs ();
out:
	return res;
}