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

相关推荐
张人玉4 小时前
技术开发文档:MES 系统与西门子 PLC 通信软件集成方案
https·c#·plc·mes系统·西门子s7
jtymyxmz4 小时前
《Unity Shader》12.5 Bloom 效果
unity·游戏引擎
jtymyxmz6 小时前
《Unity Shader》12.6 运动模糊
unity·游戏引擎
地球驾驶员7 小时前
NX二次开发C#----C#和C++的二次开发程序如何签名?
c#
小码编匠8 小时前
C# 实现网络文件传输:打造稳定可靠的工业级工具
后端·c#·.net
MM_MS9 小时前
SQL Server数据库和Visual Studio (C#)联合编程
开发语言·数据库·sqlserver·c#·visual studio
jtymyxmz9 小时前
《Unity Shader》12.4.2 实现
unity·游戏引擎
sindyra11 小时前
Unity UGUI 之 Canvas Scaler
unity·游戏引擎
c#上位机11 小时前
halcon计算区域骨架
图像处理·人工智能·计算机视觉·c#·halcon
曹牧13 小时前
C#:Dictionary类型数组
java·开发语言·c#