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

相关推荐
魔法阵维护师10 分钟前
从零开发游戏需要学习的c#模块,第三十三章(暂停菜单)
学习·游戏·c#
wapicn9912 分钟前
API接口调试笔记:从注册到第一个数据返回,全流程详解
java·开发语言·python·lua
z落落1 小时前
C# Stack栈 / Queue队列+所有集合 终极一页汇总(全覆盖、零遗漏)
java·开发语言·c#
魔士于安1 小时前
红色文化馆技术文档
前端·unity·游戏引擎·贴图·模型
LONGZETECH2 小时前
Unity 3D工业级教育软件实战:200+无人机装调任务的碰撞检测与交互落地
3d·unity·架构·游戏引擎·无人机·交互·cocos2d
淡海水2 小时前
08-认知篇-对比-injectfix深度解析
unity·c#·热更新·clr·hybrid·injectfix
迪普阳光开朗很健康2 小时前
BepInEx 插件开发文档中文翻译 - 项目分享
unity·bepinex
周杰伦fans11 小时前
C# 踩坑 CS8370:Switch Expression 在 C# 7.3 不可用及三种解决方案
c#
z落落13 小时前
C# ToCharArray + foreach遍历 + String与StringBuilder
开发语言·c#
xiaoshuaishuai814 小时前
C# AvaloniaUI动态显示图片
开发语言·c#