MonoInit.cc 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // Copyright: All Rights Reserved
  2. // Author: egametang@gmail.com (tanghai)
  3. #include <mono/jit/jit.h>
  4. #include <mono/metadata/assembly.h>
  5. #include <mono/metadata/debug-helpers.h>
  6. #include <mono/metadata/mono-gc.h>
  7. #include <mono/metadata/class.h>
  8. #include "Mono/MonoInit.h"
  9. namespace Egametang {
  10. MonoInit::MonoInit(const std::string & domainName)
  11. {
  12. domain = mono_jit_init(domainName.c_str());
  13. }
  14. MonoInit::~MonoInit()
  15. {
  16. mono_jit_cleanup(domain);
  17. }
  18. void MonoInit::LoadAssembly(const std::string& fileName)
  19. {
  20. MonoAssembly* assembly = mono_domain_assembly_open(domain, fileName.c_str());
  21. MonoImage* image = mono_assembly_get_image(assembly);
  22. imageMap[fileName] = image;
  23. }
  24. void MonoInit::InvokeMethod(const std::string& className, const std::string& methodName)
  25. {
  26. MonoImage* image = imageMap[className];
  27. std::string fullName = className + ":" + methodName;
  28. MonoMethodDesc* desc = mono_method_desc_new(fullName.c_str(), 1);
  29. MonoMethod* monoMethod = mono_method_desc_search_in_image(desc, image);
  30. MonoClass* monoClass = mono_method_get_class(monoMethod);
  31. MonoObject* newInstance = mono_object_new(domain, monoClass);
  32. MonoObject* exc;
  33. MonoObject* ret = mono_runtime_invoke(monoMethod, newInstance, 0, &exc);
  34. }
  35. void MonoInit::InvokeMain(const char *file, int argc, char** argv)
  36. {
  37. }
  38. } // namespace Egametang