toLua[二] Examples 01_HelloWorld分析

本文意在从实现原理上分析toLua的第一个Example:01_HelloWorld

一.Unity运行工程

项目非常简单,用Hello World脚本打印一些字符串

二. HelloWorld脚本分析

2.1 DoString原理

DoString一路F12跟踪调用关系,取出每一步主要调用的方法,可得下图关系

最终查到DllImport特性的tolua_loadbuffer方法,来自tolua.dll

三.tolua.dll

下载tolua runtime:

https://github.com/topameng/tolua_runtime

解压后得到如下目录,即编译出tolua.dll的源码目录

编译过程比较复杂,这里不展开了,可参考:

unity tolua

接下来直接看代码,将目录拖入VSCode中,搜索tolua_loadbuffer,可以看到调用的是LuaC函数:luaL_loadbuffer

四.比较LuaC API的实现

cpp 复制代码
extern "C"
{
#include <Lua.h>
#include <lualib.h>
#include <lauxlib.h>
}
#include <iostream>

int main()
{
    lua_State* L = luaL_newstate();
    luaL_openlibs(L);
    const char* lua_script = "print('Hello LuaC')";
    int status = luaL_dostring(L, lua_script);
    lua_close(L);
}

对luaL_dostring F12

再对luaL_loadstring F12

可以得到以下关系图

五.结论

DoString底层调用的是LuaC函数:luaL_loadbuffer和lua_pcall实现的,和C中直接调用luaL_dostring是等价的

相关推荐
_ZHOURUI_H_6 小时前
MyFramework: 同样是 Unity 游戏开发框架,和 HTFramework 的设计取向有什么不同?(下)
unity·游戏引擎·游戏开发·游戏ui·手游开发
旋律翼28 小时前
Qt Bridges for C# 深度技术解析
开发语言·qt·c#
吴可可1239 小时前
判断多段线方向的鞋带公式法
c#
qq_454245039 小时前
BasicMethod.Map 设计框架:8 个并行基础模块的数学根基与实现
数据结构·算法·c#
Byron Loong10 小时前
【c#】Bitmap释放之 大象与蚊子
开发语言·c#
临风细雨11 小时前
从 Bun 的 Rust 重写,看 C# 如何重建 AI 基础设施层
人工智能·rust·c#
吴可可12312 小时前
C# CAD二次开发自定义实体实现
c#
z落落13 小时前
C# WinForm 线程池与事件等待+进度条暂停恢复实战案例
开发语言·c#
酷酷的身影15 小时前
Managers/APConfigManager.cs
开发语言·ui·c#
贾斯汀frank1 天前
C# 15 类型系统改进:Union Types
开发语言·windows·c#