CLR重定向
CLR重定向 — ILRuntime (ourpalm.github.io)
在热更流程中,主工程创建不了热更工程的类,但是如果我们使用Activator.CreateInstance
来尝试创建热更工程的类的实例时,会发现是成功的,这是因为ILRuntime在内部实现了CLR重定向
CLR重定向的原理就是:在运行时先找到主工程内对应方法,然后再进行挟持(或者说使用钩子)来改变这个方法实际的调用效果。
1 | public static StackObject* CreateInstance(ILIntepreter intp, StackObject* esp, List<object> mStack, CLRMethod method, bool isNewObj) |
注册CreateInstance
的方法,也就是说使用RegisterCLRMethodRedirection
来对原方法Activator.CreateInstance
进行挟持。
1 | foreach (var i in typeof(System.Activator).GetMethods()) |
在上面的官方文档中还提供了UnityEngine.Debug.Log
的重定向,用于显示这个方法在热更dll中的调用堆栈。根据实际开发需要添加即可。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ATAO2017,阿宅创造奇迹!!