BsMonoMethod.cpp 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #include "BsMonoMethod.h"
  2. #include "BsMonoManager.h"
  3. using namespace CamelotFramework;
  4. namespace BansheeEngine
  5. {
  6. MonoMethod::MonoMethod(::MonoMethod* method)
  7. :mMethod(method), mReturnType(nullptr)
  8. {
  9. mThunk = mono_method_get_unmanaged_thunk(mMethod);
  10. }
  11. MonoObject* MonoMethod::invoke(MonoObject* instance, void** params)
  12. {
  13. return mono_runtime_invoke(mMethod, instance, params, nullptr);
  14. }
  15. MonoObject* MonoMethod::invokeVirtual(MonoObject* instance, void** params)
  16. {
  17. ::MonoMethod* virtualMethod = mono_object_get_virtual_method(instance, mMethod);
  18. return mono_runtime_invoke(virtualMethod, instance, params, nullptr);
  19. }
  20. void* MonoMethod::getThunk() const
  21. {
  22. return mThunk;
  23. }
  24. String MonoMethod::getName() const
  25. {
  26. return String(mono_method_get_name(mMethod));
  27. }
  28. MonoClass* MonoMethod::getReturnType()
  29. {
  30. if(mReturnType != nullptr)
  31. return mReturnType;
  32. MonoType* returnType = mono_signature_get_return_type(mono_method_signature(mMethod));
  33. if(returnType == nullptr)
  34. return nullptr;
  35. ::MonoClass* returnClass = mono_class_from_mono_type(returnType);
  36. if(returnClass == nullptr)
  37. return nullptr;
  38. mReturnType = MonoManager::instance().findClass(returnClass);
  39. return mReturnType;
  40. }
  41. }