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是等价的

相关推荐
FFZero114 小时前
【C++/Lua联合开发】 (二) Lua调用C++函数
c++·junit·lua
虚行14 小时前
C#上位机工程师技能清单文档
开发语言·c#
烛阴16 小时前
Lua 模块的完整入门指南
前端·lua
小白杨树树17 小时前
【C++】力扣hot100错误总结
c++·leetcode·c#
Tiger_shl18 小时前
三大并发集合ConcurrentDictionary、ConcurrentBag、ConcurrentQueue
开发语言·c#
时光追逐者19 小时前
一个使用 WPF 开发的 Diagram 画板工具(包含流程图FlowChart,思维导图MindEditor)
c#·.net·wpf·流程图
我是唐青枫20 小时前
C#.NET FluentValidation 全面解析:优雅实现对象验证
c#·.net
YuanlongWang20 小时前
C# 设计模式——工厂模式
开发语言·设计模式·c#
时光追逐者20 小时前
C#/.NET/.NET Core技术前沿周刊 | 第 58 期(2025年10.13-10.19)
微软·开源·c#·.net·.netcore
躺平的赶海人1 天前
C# Dictionary 线程安全指南:多线程下操作 Dictionary<string, DateTime> 的加锁策略
java·安全·c#