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