chexiongsheng
chexiongsheng
> 按照 #626 里面的 添加$InRef 依然获取不到数据,目前只能通过no_blueprint使之不要生成为蓝图函数来解决这个问题。 加no_blueprint后可以了就是那问题。你是怎么加$InRef ?然后相关的调用和读取参数的代码是怎样的?
> 这个问题十分确定。比如不加 no_blueprint,TS里声明函数 A(b:$InRef, b:boolean)void{}。那么这个函数在蓝图子类里可以正常访问传递数组进去,但是这个函数我如果在ts访问,用$ref传递一个数组进去,函数里用$unref得不到数组里的数据 实测确实有问题,定位发现是这个优化引入:https://github.com/Tencent/puerts/commit/11d76bf83d828c9a5e98ea482c63340f7cc5ed20 这个优化反射在(js -> ue)调用时,对于引用参数只传地址,不值拷贝到栈上,而(ue -> js)那判断调用方不是蓝图就也不拷贝到栈,于是就出现这种情况。 不过如果js调用的是普通蓝图或c++,或者被蓝图调用代理蓝图,都不会有问题。只有js通过反射调用一个代理蓝图才会有问题。
@terst6 你反馈的问题已经解决,合入这个commit:https://github.com/Tencent/puerts/commit/5eb678fbe32baed52457f4d97e1b1e03c0b73d61 @ljporljp 可能你的问题也是同样的问题,更新试试看。如果没解决,可以附个重现的例子。
有可能是编译环境和运行环境的库不一样导致的,建议在你们环境自己编译一份plugins。 linux大多数程序或者库都源码编译。
执行ldd -r libpuerts.so看看有没什么依赖找不到
跑在移动平台的Linux-arm64?
> 最后定位发现这个问题的原因是构建流程缺少宏定义,CMakeLists.txt添加target_compile_definitions(puerts PRIVATE V8_COMPRESS_POINTERS V8_31BIT_SMIS_ON_64BIT_ARCH)后问题解决。 那就是你们编译v8时没禁用V8_COMPRESS_POINTERS,puerts默认使用的v8是禁用指针压缩的:https://github.com/puerts/backend-v8/blob/master/linux_arm64.sh#L46C3-L46C36
多JsEnv应该也导致不了这问题。鉴于其他项目没反馈过类似的问题,我有点怀疑是多线程导致。 最好能提供个简单的重现工程。
js全局变量已经加了。 声明可以考虑不修改现有生成流程,新增“功能/工具”来按要求合并那几个文件。
你怎么调用的呢?