xtay

Results 9 comments of xtay

不管是加入CustomBridge还是Patch选项,都不能解决问题 这里的关键是il2cpp之后,interlocked.CompareExchange函数在cpp层的实现并没有反射机制,直接变成了CompareExchangeImpl,所以运行时在尝试调用泛型的CompareExchange就会报错。这也是为什么Unity编辑器端OK但是Android就报错的原因。 解决办法1,适用于用户这边,改用delegate而不用event,或者在event里面手动添加add/remove,都可以去除调用CompareExchange这一条指令,但是这会使语义降级,把线程安全的变成线程不安全的。(因为CompareExchange是.net实现CAS机制的函数) 解决办法2,需要修改InjectFix,inject时自己增加一层wrapper函数,间接调用对应的interlocked.CompareExchange函数,并显式化这一层wrapper函数(防止被il2cpp裁剪);同时生成patch指令时把对应的对interlocked.CompareExchange的callExtern调用转到wrapper函数中 至于为什么il2cpp不把CompareExchange也增加反射机制,我理解这是il2cpp的优化机制,毕竟它也想不到会有InjectFix这样增加虚拟机调用神奇的用法。 作者有没有兴趣加个QQ我们细聊🤩

> > 你要是把ILRuntime的vector相关的静态wrap代码删了,迫使他用反射,我相信你的这个测试数据应该会相差不多,甚至大概率是ILRuntime更慢。 > > 你可以测试一发,贴个数据 感谢大佬指点,我再研究研究哈

> 所有构造函数都不支持 能问一下原理上是什么原因导致的不能支持构造函数吗?

> > > 所有构造函数都不支持 > > > > > > 能问一下原理上是什么原因导致的不能支持构造函数吗? > > 不是不能,而是早期觉得麻烦,直觉上用处不大。然后各项目使用后续也没觉得带来什么不便,就不加了 明白了,感谢~

土问为啥不能写new int[] {1, 2, 3}? 我试了一下写new string[] {"Hello", "World", "!!!"}是可以patch的,好神奇。。

> 你了解这个干嘛呢? 稍微改了一下IFix.exe,添加了一个nuget包,然后用unity自带的mcs编不过了。。

> IFix.exe应该问题不大,主要是IFix.Core.dll必须用unity的编译。 这样流程就感觉有点分裂了。。所以。。 我就在想编出来的dll反正都是标准的CIL,用unity的编译器编,还是用vs的编译器编应该不会有太大区别才对。。。所以想来找作者求证一下具体问题。。。

and `unique` field is missing from the exported jsonl this is from the exported jsonl ``` "person_7_256124489999602":{"type":"LSM_TREE","bucket":"person_7","properties":["age"],"nullStrategy":"SKIP"} ``` and this is from `select from schema: types` ``` { "name": "person[age]",...