2
0

teste.c 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #include <mono/jit/jit.h>
  2. #include <mono/metadata/environment.h>
  3. /*
  4. * Very simple mono embedding example.
  5. * Compile with:
  6. * gcc -o teste teste.c `pkg-config --cflags --libs mono` -lm
  7. * mcs test.cs
  8. * Run with:
  9. * ./teste test.exe
  10. */
  11. static MonoString*
  12. gimme () {
  13. return mono_string_new (mono_domain_get (), "All your monos are belong to us!");
  14. }
  15. static void main_function (MonoDomain *domain, const char *file, int argc, char** argv)
  16. {
  17. MonoAssembly *assembly;
  18. assembly = mono_domain_assembly_open (domain, file);
  19. if (!assembly)
  20. exit (2);
  21. /*
  22. * mono_jit_exec() will run the Main() method in the assembly.
  23. * The return value needs to be looked up from
  24. * System.Environment.ExitCode.
  25. */
  26. mono_jit_exec (domain, assembly, argc, argv);
  27. }
  28. int
  29. main(int argc, char* argv[]) {
  30. MonoDomain *domain;
  31. const char *file;
  32. int retval;
  33. if (argc < 2){
  34. fprintf (stderr, "Please provide an assembly to load");
  35. return 1;
  36. }
  37. file = argv [1];
  38. /*
  39. * mono_jit_init() creates a domain: each assembly is
  40. * loaded and run in a MonoDomain.
  41. */
  42. domain = mono_jit_init (file);
  43. /*
  44. * We add our special internal call, so that C# code
  45. * can call us back.
  46. */
  47. mono_add_internal_call ("MonoEmbed::gimme", gimme);
  48. main_function (domain, file, argc - 1, argv + 1);
  49. retval = mono_environment_exitcode_get ();
  50. mono_jit_cleanup (domain);
  51. return retval;
  52. }