LiteLDev / LegacyScriptEngine

A plugin engine for running LLSE plugins on LeviLamina
GNU General Public License v3.0
48 stars 8 forks source link

NativeApis for ScriptEngine #174

Closed KawaiiNahida closed 2 months ago

KawaiiNahida commented 2 years ago

Is your feature request related to a problem? Please describe.

NativeAPIs for LLSE is working in progress, this issue is created to track the progress

Describe the solution you'd like

Wrap STL class 技术路线

Wrap MC class & 自动 Binding 技术路线

关于MC class wrapper有两种实现方案:

  1. 使用NativeClass做通用类,储存void*,使用字符串储存实际指针类型,并封装一套通用的API 需要调用具体类型各自的成员方法,在运行时、语言层使用反射拦截非法成员方法请求,并根据储存的当前类型信息查找symbol进行调用 此方案的优点是(相比方案2)不需要手动编写整个生成器轮子,缺点是需要想办法提供symbol查找机制(如在内存中储存一份数据库等)

  2. 在脚本层实现整个继承体系,每个类分文件并使用脚本语言自身的include机制进行互相引用,最后在脚本层调用symcall实现call 此方案的优点是CPP层完全不需要设计任何接口,仅需基础hook symcall接口即可 缺点是性能暂时不明有待测试,另外需要手动设计编写生成器,从originalData(或AST)起手,生成统一的接口声明语言(如TS声明),再由此生成各种语言的接口定义文件。目测无相关轮子,需要全部自行实现

如果选择方案2,生成器可以作为单独项目开发,而且生成器结果也可以为补全插件所用