BsMonoMethod.cpp 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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. void* MonoMethod::getThunk() const
  16. {
  17. return mThunk;
  18. }
  19. String MonoMethod::getName() const
  20. {
  21. return String(mono_method_get_name(mMethod));
  22. }
  23. MonoClass* MonoMethod::getReturnType()
  24. {
  25. if(mReturnType != nullptr)
  26. return mReturnType;
  27. MonoType* returnType = mono_signature_get_return_type(mono_method_signature(mMethod));
  28. if(returnType == nullptr)
  29. return nullptr;
  30. ::MonoClass* returnClass = mono_class_from_mono_type(returnType);
  31. if(returnClass == nullptr)
  32. return nullptr;
  33. mReturnType = MonoManager::instance().findClass(returnClass);
  34. return mReturnType;
  35. }
  36. }