c++调用lua

一、环境搭建
先下载LuaForWindows并安装。 我的目录如下D:\Tool\Lua\5.1(这里使用的是5.1版本)
1 、启动VS2012,选择C++下的"win32"项目类型中的"Win2控制台应用程序"
2、工具——选项——项目和解决方案——VC++目录——可执行程序(D:\Tool\Lua\5.1);包含文件(D:\Tool\Lua\5.1\include);库文件(D:\Tool\Lua\5.1\lib);项目——'项目名'属性 子菜单——配置属性——链接器——输入——附加依赖项(lua51.lib lua5.1.lib)

图片
图片
上代码

// VsLuaTest.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

extern "C"
{
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
};

//#pragma  comment(lib, "lua51.lib")
/*Lua解释器指针*/
lua_State* L;

int luaAdd(int x, int y)
{
	int sum;
	lua_getglobal(L, "add");	//查找lua_add函数,并压入栈底  
	lua_pushnumber(L, x);		//参数入栈
	lua_pushnumber(L, y);
	lua_call(L, 2, 1);			
	sum = (int)lua_tonumber(L, -1);	//从栈中取回返回值  
	return sum;
}

int _tmain(int argc, _TCHAR* argv[])
{
	/*初始化Lua*/  
	L = lua_open();				///* opens Lua,使用lua5.2版本则是luaL_newstate();  
	luaopen_base(L);			/* opens the basic library 这些是在引入一些库,
								就如如果add函数在编译成dll后如果在lua中要使用需要require “动态库名"一样*/  

	//library这些库是加在这里只是测试
	/*
	luaopen_table(L);        // opens the table   
	luaopen_io(L);           // opens the I/O library  
	luaopen_string(L);       // opens the string lib. 
	luaopen_math(L);         // opens the math lib.  
	*/
	//luaL_openlibs(L);		  加载Lua通用扩展库--如果不需要扩展则不用加  
	//lua_register(L,"add",luaAdd);//册add函数,但是5.1版本不行

	luaL_dofile(L,"add.lua");	//加载lua文件,回将里面的函数加载到全局表中  
								//luaL_loadfile(L, "add.lua");//这里是不同版本的接口
	//如果调用luaL_dofile 加载lua脚本文件,则不需要
	//如果是调用luaL_loadfile加载,则需要在程序中调用一次lua_pcall(L, 0, 0, 0);
	//lua_pcall(L, 0, LUA_MULTRET, 0);//

	int sum = luaAdd(10, 15);

	printf("the sum is = %d\n", sum);
	//关闭lua环境  
	lua_close(L);

	return 0;
}

头文件lua.h定义了lua提供的基础函数,包括创建lua环境、调用lua函数(如lua_pcall)、读写lua环境中全局变量,以及注册供lua调用的新函数等。Lua.h中定义所有内容都有一个lua_前缀。

头文件lauxlib.h定义了辅助库(auxiliary library,auxlib)提供的函数。它的所有定义都以luaL_开头(如luaL_loadbuffer)。辅助库是一个使用lua.h中API编写出的一个较高的抽象层。Lua的所有标准库编写都用到了辅助库。<p style="margin: 0px; padding: 0px; line-height: 26px; font-family: Arial; background-color: rgb(255, 255, 255);"><span style="color:#ff00;">注意</span>:Lua脚本的编译执行是相互独立的,在不同的线程上执 行。通过luaL_newstate()函数可以申请一个虚拟机,返回指针类型lua_State。今后其他所有Lua Api函数的调用都需要此指针作为第一参数,用来指定某个虚拟机。所以lua_State代表一个lua虚拟机对像,luaL_newstate()分配 一个虚拟机。lua类库管理着所有的虚拟机。销毁指定虚拟机的所有对像(如果有垃圾回收相关的无方法则会调用该方法)并收回所有由该虚拟机动态分配产生的 内存,在有些平台下我们不需要调用此函数,因为当主程序退出时,资源会被自然的释放掉,但是但一个长时间运行的程序,比如后台运行的web服务器,需要立 即回收虚拟机资源以避免内存过高占用。</p>


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值