lua怎么嵌入php,Lua教程(一):在C++中嵌入Lua脚本
本系列教程主要介绍如何在C/C++程序里面嵌入Lua脚本,我打算从以下几个方面来介绍:
1.如何在C/C++里面嵌入Lua脚本
2.Lua访问C/C++数据结构(这里面要介绍类,结构体,函数,变量,枚举等数据类型在lua里面如何访问)
3.C/C++访问Lua的数据,主要是基本数据类型,函数和Table
4.Cocos2D-X里面的Lua绑定(含自动绑定与手动绑定)
5.Cocos2D-x里面Lua和C/C++相互调用
6.Cocos2D-x里面Lua和Java相互调用
7.Cocos2D-x里面Lua和Objective-C相互调用
本系列教程不会过多地介绍Lua的基本语法,关于Lua基本语法的学习,推荐《Programming In Lua》。 如有纰漏,欢迎指出,谢谢。
另外,关于更新时间,每周一篇,定期或者不定期,呵呵。
Mac项目集成Lua
准备工作
首先,新建一个控制台应用程序。 打开Xcode,New->Project->OSX->Command Line Tool,取名为Lesson01如下图所示:
接下来,我们需要下载lua5.2.3.下载完后,解压缩,然后cd到刚刚解压缩的路径下面,输入make macosx,这样便可以生成Mac下面的lib文件。
接下来把刚刚解压缩的文件夹拷贝到你新建的工程下面,然后设置include路径和library路径。(注意,这里是不需要把头文件添加到Xcode里面的,只要指定include路径,编译的时候,编译器会自动去找的。)
因为我的Lua文件夹的路径是:xxxx/Lesson01/lua-5.2.3,所以,我把search path和library path分别设置为:
//search path
$(SRCROOT)/Lesson01/lua-5.2.3/src/
//library path
$(PROJECT_DIR)/Lesson01
下面是我的工程与lua之间的目录结构,liblua.a文件是从src里面拷贝出来的。(前面我们使用make macosx生成出来的)
注意:如果直接添加lua的所有源码,则会编译报错。因为lua.c里面也有一个main函数。这个main函数是用来生成可执行程序的。 另外,如果是添加其它第三方的库,也可以参考这个方法,添加search path和library path
C++调用Lua文件
首先,打开main.cpp,并包含以下头文件:
#include "lua.hpp"
如果此时编译不报错,则说明你之前设置的search path是正确的,如果报错,请自行调整search path。
这里面的lua.hpp的内容如下:
extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
这才是大多数Lua教程里的代码嘛。然后在main函数里面添加以下内容:
/1. 初始化Lua虚拟机
lua_State *lua_state;
lua_state = luaL_newstate();
//2.设置待注册的Lua标准库,这个库是给你的Lua脚本用的
//因为接下来我们只想在Lua脚本里面输出hello world,所以只引入基本库就可以了
static const luaL_Reg lualibs[] =
{
{ "base", luaopen_base },
{ NULL, NULL}
};
//3.注册Lua标准库并清空栈
const luaL_Reg *lib = lualibs;
for(; lib->func != NULL; lib++)
{
luaL_requiref(lua_state, lib->name, lib->func, 1);
lua_pop(lua_state, 1);
}
//4、运行hello.lua脚本
luaL_dofile(lua_state, "hello.lua");
//5. 关闭Lua虚拟机
lua_close(lua_state);
新建Lua文件
选择New->File->Other,然后命名为hello.lua, 以下是hello.lua里面的内容:
print "Hello World"
编译并运行
此时编译并运行,这时可能看不到控制台输出”Hello World”。因为你的Lua脚本没有拷贝到程序里面去,我们需要再设置一下。如下图所示: (注意:subpath要清空,copy only when installing去掉打勾)
这时,编译并运行,你会得到如下结果 :
接下来,我们讲讲IOS项目怎么集成Lua。
IOS项目集成Lua
IOS项目集成Lua的方式与Mac大同小异,顺便补充一句,Lua本质上是一个c程序,任何平台下面集成相应c库的方法都是适用的。
这里我主要写一些注意事项吧:
1.我们刚才编译好的macosx库只能给mac程序用,ios需要单独编译(当然,windows和linux也需要再单独编译,编译方法见下载的lua-5.2.3/doc/readme.html)
2.编译ios可以通过添加一个static library,然后把所有的Lua文件添加到这个Library里面。最后,让主项目依赖这个Library就可以了。
3.直接使用luaL_dofile(lua_state, “hello.lua”)是行不通的,因为ios项目的资源路径在一个沙盒里。我们必须取得全路径才可以访问到这个hello.lua文件。以cocos2d-x为例,我们可以使用下面的代码获得hello.lua的全路径,然后再传递给Lua虚拟机。
std::string scriptPath = FileUtils::getInstance()->fullPathForFilename("hello.lua");
int status = luaL_loadfile(lua_state, scriptPath.c_str());
Android项目集成Lua
Android集成Lua需要使用Android.mk把Lua打包成一个静态库,然后在项目里面包含这个Lua模块。具体的做法可以参考cocos2d-x。
lua怎么嵌入php,Lua教程(一):在C++中嵌入Lua脚本相关推荐
- python嵌入到qt_在Qt图形用户界面中嵌入绘图
vpython的FAQs声称vpython的体系结构使任何嵌入都成为一个问题-: Q:有没有办法在另一个环境中嵌入VPython?This is difficult because VPython h ...
- html嵌入视频mp4视频无法播放,html中嵌入mp4格式视频无法播放
我们在制作网页的时候经常会在网页中添加mp4格式的视频,但是我们会发现html中嵌入mp4格式视频无法播放,那么要怎么办呢?下面我们就一起去看看解决方法吧. 下面的这段代码是在我的test.html中 ...
- 在windows程序中嵌入Lua脚本引擎--编写自己的Lua库
在<在windows程序中嵌入Lua脚本引擎--建立一个简易的"云命令"执行的系统>一文中,我提到了使用Lua的ffi库,可以让我们像写C代码一样写lua程序.这是个非 ...
- html中看到php代码_如何在HTML中嵌入PHP代码
如何在HTML中嵌入PHP代码 对于一个有经验的 PHP Web 开发者,在HTML中嵌入PHP代码是一件非常容易的事情.但是对于刚开始接触 PHP 编程语言的新手这就是一个问题.下面是小编为大家带来 ...
- 如何在Panel中嵌入子窗体
文章目录 1 如何在Panel中嵌入子窗体 1.1 在Panel中嵌入子窗体的方法 1 如何在Panel中嵌入子窗体 1.1 在Panel中嵌入子窗体的方法 首先看嵌入前的效果: 点击按钮" ...
- html5中加入音频,使用HTML5在网页中嵌入音频和视频播放的基本方法
HTML5 特性,包括原生音频和视频支持而无需 Flash. HTML5 和 标签让我们给站点添加媒体变得简单.我们只需要设置 src 属性来识别媒体资源,包含 controls 属性让用户可以播放和 ...
- html5页面嵌入视频播放,使用HTML5在网页中嵌入音频和视频播放的基本方法
HTML5 特性,包括原生音频和视频支持而无需 Flash. HTML5 和 标签让我们给站点添加媒体变得简单.我们只需要设置 src 属性来识别媒体资源,包含 controls 属性让用户可以播放和 ...
- 在windows程序中嵌入Lua脚本引擎--建立一个简易的“云命令”执行的系统
在<在windows程序中嵌入Lua脚本引擎--使用VS IDE编译Luajit脚本引擎>开始处,我提到某公司被指责使用"云命令"暗杀一些软件.本文将讲述如何去模拟一个 ...
- 在windows程序中嵌入Lua脚本引擎--使用VS IDE编译Luajit脚本引擎
前些天听到一个需求:某业务方需要我们帮忙清理用户电脑上的一些废弃文件.同事完成这个逻辑的方案便是在我们程序中加入了一个很"独立"的业务逻辑:检索和删除某个程序产生的废弃文件.试想, ...
最新文章
- 【随想】_无关技术_你是合格的项目经理人吗?
- svn仓库出现already locked error解决方法:cleanup
- 听说你,对薪酬待遇不太满意。。。
- pip list和pip freeze的区别(列出所有包,列出包的requirements格式)
- [C++] STACK_Principle
- 二十四、爬取古诗网中的100首古诗文
- c语言fmt,Go 标准库-fmt
- jedis操作redis(二)
- 我的世界服务器无限装备指令2020,我的世界区域保护指令_我的世界区域保护指令除了自己手机版刷屏2020_攻略...
- php post修改字段,单个{customposttype}.php中的函数wp_insert_post()清除自定义字段
- 详解 HTTPS 移动端对称加密套件优
- java使用httpClient解决外部url请求访问
- 2020-8-5 Codeforces摸鱼报告
- java asm 全称,java ASM
- 计算机科学与技术实训内容,计算机科学与技术专业实训大纲.doc
- HTTP常见状态码 2xx 3xx 4xx 5xx
- 对象base64转码_什么是 Base64 编码
- MySQL 10060错误 解决方法
- 《道德经》| 夫唯不盈,故能蔽而新成
- sql横着连接起来sql_SQL联接