trying PrepareMethod instead of Invoke
	
		
			
	
		
	
	
		
			
				
	
				continuous-integration/drone/push Build is passing
				
					Details
				
			
		
	
				
					
				
			
				
	
				continuous-integration/drone/push Build is passing
				
					Details
				
			
		
	
							parent
							
								
									5a536e6123
								
							
						
					
					
						commit
						0d969322ad
					
				| 
						 | 
					@ -2,6 +2,7 @@
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
using System.Reflection;
 | 
					using System.Reflection;
 | 
				
			||||||
 | 
					using System.Runtime.CompilerServices;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace Encompass
 | 
					namespace Encompass
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -59,8 +60,7 @@ namespace Encompass
 | 
				
			||||||
                CallGenericMethod(type, "SendMessage", 2, new object[] { Activator.CreateInstance(type), 1 });
 | 
					                CallGenericMethod(type, "SendMessage", 2, new object[] { Activator.CreateInstance(type), 1 });
 | 
				
			||||||
                CallGenericMethod(type, "ReadMessage", null);
 | 
					                CallGenericMethod(type, "ReadMessage", null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                // can't reflect on methods that return a span...
 | 
					                CallGenericMethod(type, "ReadMessages", null);
 | 
				
			||||||
                //CallGenericMethod(type, "ReadMessages", null);
 | 
					 | 
				
			||||||
                CallGenericMethod(type, "SomeMessage", null);
 | 
					                CallGenericMethod(type, "SomeMessage", null);
 | 
				
			||||||
                if (typeof(IHasEntity).IsAssignableFrom(type))
 | 
					                if (typeof(IHasEntity).IsAssignableFrom(type))
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
| 
						 | 
					@ -71,25 +71,29 @@ namespace Encompass
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // trying to use PrepareMethod because we can't reflect invoke methods that return a span...
 | 
				
			||||||
        private void CallGenericMethod(Type type, string methodName, object[] parameters)
 | 
					        private void CallGenericMethod(Type type, string methodName, object[] parameters)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var readComponentMethod = typeof(Engine).GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance);
 | 
					            var readComponentMethod = typeof(Engine).GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance);
 | 
				
			||||||
            var genericReadComponentMethod = readComponentMethod.MakeGenericMethod(type);
 | 
					            var genericReadComponentMethod = readComponentMethod.MakeGenericMethod(type);
 | 
				
			||||||
            genericReadComponentMethod.Invoke(this, parameters);
 | 
					            //genericReadComponentMethod.Invoke(this, parameters);
 | 
				
			||||||
 | 
					            RuntimeHelpers.PrepareMethod(genericReadComponentMethod.MethodHandle);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private void CallGenericMethod(Type type, string methodName, Type[] types, object[] parameters)
 | 
					        private void CallGenericMethod(Type type, string methodName, Type[] types, object[] parameters)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var readComponentMethod = typeof(Engine).GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance, null, types, null);
 | 
					            var readComponentMethod = typeof(Engine).GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance, null, types, null);
 | 
				
			||||||
            var genericReadComponentMethod = readComponentMethod.MakeGenericMethod(type);
 | 
					            var genericReadComponentMethod = readComponentMethod.MakeGenericMethod(type);
 | 
				
			||||||
            genericReadComponentMethod.Invoke(this, parameters);
 | 
					            //genericReadComponentMethod.Invoke(this, parameters);
 | 
				
			||||||
 | 
					            RuntimeHelpers.PrepareMethod(genericReadComponentMethod.MethodHandle);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private void CallGenericMethod(Type type, string methodName, int argumentNum, object[] parameters)
 | 
					        private void CallGenericMethod(Type type, string methodName, int argumentNum, object[] parameters)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var method = typeof(Engine).GetRuntimeMethods().Where(m => m.Name == methodName && m.GetParameters().Length == argumentNum).First();
 | 
					            var method = typeof(Engine).GetRuntimeMethods().Where(m => m.Name == methodName && m.GetParameters().Length == argumentNum).First();
 | 
				
			||||||
            var genericMethod = method.MakeGenericMethod(type);
 | 
					            var genericMethod = method.MakeGenericMethod(type);
 | 
				
			||||||
            genericMethod.Invoke(this, parameters);
 | 
					            //genericMethod.Invoke(this, parameters);
 | 
				
			||||||
 | 
					            RuntimeHelpers.PrepareMethod(genericMethod.MethodHandle);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue