Lua与C++相互调用
{--1、环境--}
为了快速入手,使用了小巧快速的vc++6.0编译器
以及在官网下载了Lua安装包..官网地址{--http://10.21.210.18/seeyon/index.jsp--}
两者都安装好后,即可进行
{--2、工程以及配置--}
1、首先用vc++6.0创建一个简单的win32 console application
2、从Lua的安装目录下复制include和lib两个目录下的文件到刚刚创建的工程的目录下。
{include:包含了lua的.h头文件}
{lib:包含了lua的动态链接库dll}
3、为了使vc++6.0编译和链接时能找到所需的Lua文件
{在工程下添加刚刚复制过来的所有.h文件,保证编译通过}
{在编译器里面设置dll{工程-设置-对象/库模块 那一行的最后添加 lua5.1.lib lua51.lib,保证链接时通过}}
{--3、C++与Lua相互调用例子--}
要调用Lua,首先我们得写一个简单的Lua文件,并把该文件保存到一个路径下,这里比如路径是{F:\\Lua}
function add(x, y)
n1, n2 = clib();//关于clib()是一个C函数,稍后会介绍到。
print("The first arg"..n1);
print("The second arg"..n2);
return x + y
end
该函数用于计算从C函数传递过来的的两个参数x,y的和。
另外为了方便,这函数里面同时也演示了如何调用Lua如何调用C函数clib()
接下来我们开始编写主函数
#include<stdlib.h> // 这是个C++程序, 所以要extern "C",
// 因为lua的头文件都是C格式的
extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
} lua_State* L; /* the Lua interpreter */ //给lua调用的c函数必须定义成static int XXX(lua_State *L)
static int clib(lua_State *L)
{
lua_pushnumber(L, 100);
lua_pushnumber(L, 200);
return 2;
//lua调用该函数将从栈中,取2个结果
}
//此处C++调用了Lua函数
int luaadd (int x, int y)
{
int sum;
/* the function name */
lua_getglobal(L, "add");
/* the first argument */
lua_pushnumber(L, x);
/* the second argument */
lua_pushnumber(L, y);
/* call the function with 2 arguments, return 1 result */
//说明调用的函数是带有2个参数和1个返回值
lua_call(L, 2, 1); /* get the result */
sum = (int)lua_tonumber(L, -1);
lua_pop(L, 1); return sum;
} int main(int argc, char* argv[])
{
int sum; /* initialize Lua */
L = luaL_newstate();//创建一个指向lua解释器的指针
/* load Lua base libraries */
luaL_openlibs(L);
lua_register(L, "clib", clib);
/* load the script */
/*Lcc.lua是这个C++程序调用的Lua文件,
注意luaL_dofile()函数的第二个参数要写绝对路径,否则执行后会提示
“unprotected error in call to lua api(attampt to call a nil value)”错误 */
luaL_dofile(L, "F:\\lua\\Lcc.lua"); /* call the add function */
sum = luaadd(10, 15); /* print the result */
printf( "The sum is %d\n", sum ); /* cleanup Lua */
lua_close(L);
system("pause");
return 0;
}
以上的clib()函数就是Lua文件里面要调用的函数
关键代码:lua_register(L, "clib", clib);将函数注册到Lua栈中,使得Lua可以调用到。
而C++如何调用Lua
关键代码:luaL_dofile()以及luaadd()函数
-------------------------------------------------------------------------------------
By Alwaystiys..
From 2014.09.05
At Gz.
Lua与C++相互调用的更多相关文章
- lua编程之lua与C相互调用
lua是扩展性非常良好的语言,虽然核心非常精简,但是用户可以依靠lua库来实现大部分工作.除此之外,lua还可以通过与C函数相互调用来扩展程序功能.在C中嵌入lua脚本既可以让用户在不重新编译代码的情 ...
- uLua学习笔记(三):Unity3D和Lua之间的相互调用
这篇笔记主要集中学习一下uLua和Unity3D之间相互调用的方法,我们导入了uLua之后,现在会弹出一个类似学习屏幕的东西,如下: 先赞一个! Unity3D调用Lua Unity3D调用Lua的方 ...
- lua语言自学知识点----Lua与.Net相互调用
知识点: LuaInterface作用是用来完成Lua与C#的相互调用. LuaInterface核心库:1.luainterface.dll 用于C#读取lua(放在bin目录同级) 2.luane ...
- Lua 与 OC 相互调用
本文主要讲如何完成lua和object-c的相互调用. lua是一种脚本语言,可以方便的移植到各种宿主语言中,并且可以支持热更新,在游戏开发中也能当做主要的语言来编写游戏的逻辑,但是要接入 ...
- C和Lua之间的相互调用
前面的话 第一次接触Lua是因为Unity游戏中需要热更,但是一直没搞懂Lua是怎么嵌入到别的语言中执行的,如何互相调用的.这次打算好好了解一下C跟lua是如何交互的 那么如何使用Lua语言? lua ...
- C#与lua相互调用
Lua是一种很好的扩展性语言,Lua解释器被设计成一个很容易嵌入到宿主程序的库.LuaInterface则用于实现Lua和CLR的混合编程. (一)C#调用Lua 测试环境:在VS2015中建一个C# ...
- C程序与Lua脚本相互调用
Lua脚本是一种可用于C程序开发/测试的工具,本篇介绍一下C程序与Lua脚本如何进行相互调用,更加详细的操作参见<Programing in Lua>.本文分为3个部分:1.Windows ...
- Unity3D 预备知识:C#与Lua相互调用
在使用Unity开发游戏以支持热更新的方案中,使用ULua是比较成熟的一种方案.那么,在使用ULua之前,我们必须先搞清楚,C#与Lua是怎样交互的了? 简单地说,c#调用lua, 是c# 通过Pin ...
- 原生实现C#和Lua相互调用-Unity3D可用
引言 本篇简单介绍如何在C#中执行Lua脚本,传递数据到Lua中使用,以及Lua中调用C#导出的方法等.在Unity中开发测试,并打IL2CPP的Android包在模拟器上运行通过.Lua版本 ...
随机推荐
- poj1625Censored!(AC自动机+dp)
链接 第一次做这种题目,参考了下题解,相当于把树扯直了做DP,估计这一类题都是这个套路吧. 状态方程dp[i][next] = dp[i][next]+dp[i][j] ;dp[i][j]表示长度为i ...
- 【转】Linux下patch打补丁命令
[转]Linux下patch打补丁命令 转自:http://www.cnblogs.com/noaming1900/archive/2010/10/28/1863282.html 此命令用于为特定软件 ...
- ionic cordova
ionic cordova 打包 文章 http://blog.csdn.net/i348018533/article/details/47258449 http://www.cnblogs.com/ ...
- mac Zip 常用命令
最通俗的用法 zip -q -r -e -m -o [yourName].zip someThing -q 表示不显示压缩进度状态 -r 表示子目录子文件全部压缩为zip //这部比较重要,不然的话 ...
- 003_kafka_主要配置
1.broker配置 2.Producer主要配置 3.Consumer主要配置 出错提示信息: replication factor: 1 larger than available brokers ...
- Java第一个程序
public class HelloWorld{ public static void main(String[] args){ System.out.println("七期项目二部&quo ...
- bugfree安装
1.下载xampp文件:xampp-linux-x64-5.5.30-3-installer.run 2.安装此文件,用root账号安装,安装命令:./xampp-linux-x64-5.5.30-3 ...
- JavaScript的Date对象
整理了一些JavaScript时间的对象,如下所示: toLocaleString()得到当前的年月日和时间的字符串 toLocaleTimeString() 得到当前的时间字符串 toLocaleD ...
- jQuery 获取checkbox 获取值
//全选 $("[name='checkbox']").attr("checked",'true'); //取消全选 $("[name='checkb ...
- 【必备】史上最全的浏览器 CSS & JS Hack 手册(转)
浏览器渲染页面的方式各不相同,甚至同一浏览器的不同版本(“杰出代表”是 IE)也有差异.因此,浏览器兼容成为前端开发人员的必备技能.如果有一份浏览器 Hack 手册,那查询起来就方便多了.这篇文章就向 ...