BsMonoMethod.cpp 1.2 KB

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