using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace HybridCLR { public static class RuntimeApi { #if UNITY_STANDALONE_WIN private const string dllName = "GameAssembly"; #elif UNITY_IOS || UNITY_STANDALONE_OSX || UNITY_WEBGL private const string dllName = "__Internal"; #else private const string dllName = "il2cpp"; #endif /// /// 加载补充元数据assembly /// /// /// /// public static unsafe LoadImageErrorCode LoadMetadataForAOTAssembly(byte[] dllBytes, HomologousImageMode mode) { #if UNITY_EDITOR return LoadImageErrorCode.OK; #else fixed(byte* data = dllBytes) { return (LoadImageErrorCode)LoadMetadataForAOTAssembly((IntPtr)data, dllBytes.Length, (int)mode); } #endif } /// /// 加载补充元数据assembly /// /// /// /// [DllImport(dllName, EntryPoint = "RuntimeApi_LoadMetadataForAOTAssembly")] public static extern int LoadMetadataForAOTAssembly(IntPtr dllBytes, int dllSize, int mode); /// /// 获取解释器线程栈的最大StackObject个数(size*8 为最终占用的内存大小) /// /// [DllImport(dllName, EntryPoint = "RuntimeApi_GetInterpreterThreadObjectStackSize")] public static extern int GetInterpreterThreadObjectStackSize(); /// /// 设置解释器线程栈的最大StackObject个数(size*8 为最终占用的内存大小) /// /// [DllImport(dllName, EntryPoint = "RuntimeApi_SetInterpreterThreadObjectStackSize")] public static extern void SetInterpreterThreadObjectStackSize(int size); /// /// 获取解释器线程函数帧数量(sizeof(InterpreterFrame)*size 为最终占用的内存大小) /// /// [DllImport(dllName, EntryPoint = "RuntimeApi_GetInterpreterThreadFrameStackSize")] public static extern int GetInterpreterThreadFrameStackSize(); /// /// 设置解释器线程函数帧数量(sizeof(InterpreterFrame)*size 为最终占用的内存大小) /// /// [DllImport(dllName, EntryPoint = "RuntimeApi_SetInterpreterThreadFrameStackSize")] public static extern void SetInterpreterThreadFrameStackSize(int size); } }