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

相关推荐
Knight_AL32 分钟前
用 JOL 验证 synchronized 的锁升级过程(偏向锁 → 轻量级锁 → 重量级锁)
开发语言·jvm·c#
Dr.勿忘1 小时前
MUMU模拟器adb连接失败:cannot connect to 127.0.0.1:16384: 由于目标计算机积极拒绝,无法连接。 (10061)
游戏·unity·adb·游戏程序·调试·模拟器
江沉晚呤时1 小时前
从零实现 C# 插件系统:轻松扩展应用功能
java·开发语言·microsoft·c#
我只有一台windows电脑2 小时前
西门子S7通讯(三)
c#
cjp5606 小时前
018.C#管道服务,本机两软件间通讯交互
开发语言·c#
故事不长丨7 小时前
C#log4net详解:从入门到精通,配置、实战与框架对比
c#·.net·wpf·log4net·日志·winform·日志系统
不绝1918 小时前
C#核心——面向对象:封装
开发语言·javascript·c#
一然明月9 小时前
C#语言基础详解和面向对象编程核心概念与高级特性详解(万字详解带示例代码)
开发语言·c#
大雨淅淅9 小时前
【开发工具】Postman从入门到精通:环境搭建与使用全攻略
开发语言·lua
爱学习的潇潇9 小时前
Postman学习之常用断言
自动化测试·软件测试·功能测试·学习·程序人生·lua·postman