您的位置:首页 > 编程语言 > Lua

c++和lua交互

2013-09-23 13:10 435 查看
Lua是一个很好用的脚本语言,在游戏开发中可以和c++完美结合,我总结的几点使用和大家分享一下,第一c++如何调用lua脚本,第二c++如何调用脚本函数,第三脚本如何调用c++函数。写的不一定好
还请各位多指导

环境:vc6.0编译器

Lua5.1(这个很简单,大家可以自行安装)

环境准备好后我们就可以开始配置环境了:

我的lua安装目录是:E:\Program Files\Lua\5.1

一、创建工程LuaTest Win32Console Application

二、在vc工程中加入lua环境








按照上图所示配置就可以了,别忘了把路径换成自己的lua安装路径。这里配置的目的就是可以让程序中可以顺利的调用lua.



三、创建程序

/************************************************************************/

/* 事例一:(程序直接调用lua脚本写我们最熟悉的显示helloword) */

/************************************************************************/

创建HelloWord.cpp

#include <iostream>
#include "lua.hpp"
using namespace std;
/* 在这种结构中保持状态的所有信息。*/
lua_State* L;
 
int main ( int argc, char *argv[] )
{
    /* 初始化lua*/
    L = lua_open();
    /* 加载 lua libraries */
    luaL_openlibs(L);
    /* 调用脚本 */
    luaL_dofile(L, "HelloWordLua.lua");
    /* 销毁所有lua state中的对象 */
    lua_close(L);
    return 0;
}


HelloWordLua.lua


print("hello world")




/************************************************************************/

/* 事例二(c++程序调用lua脚本函数) */

/************************************************************************/

#include <iostream>
#include "lua.hpp"
using namespace std;
/* 在这种结构中保持状态的所有信息。*/
lua_State* L;
int luaswap ( int x, int y )
{
    /* 函数名 */
    lua_getglobal(L, "swap");
    /* 参数压栈*/
    lua_pushnumber(L, x);
    /* 参数压栈 */
    lua_pushnumber(L, y);
    /* 调用环数 2个参数1个返回值*/
    lua_call(L, 2, 1);
    /* get the result */
    int result = (int)lua_tointeger(L, -1);
    lua_pop(L, 1);
    return result;
}
 
int main ( int argc, char *argv[] )
{
    /* 初始化lua*/
    L = lua_open();
    /* 加载 lua libraries */
    luaL_openlibs(L);
    /* 调用脚本 */
    luaL_dofile(L, "swap.lua");
/*调用函数*/
int result = luaswap(20,50);
cout<<"两个数中大的数为:"<<result<<endl;
    /* 销毁所有lua state中的对象 */
    lua_close(L);
    return 0;
}


swapforl.lua

function swap(x,y)
	if x > y then
		print("lua printx"..x)
		return x
	else
		print("lua printy"..y)
		return y
	end
end







事例三(lua脚本调用c++程序函数)

/************************************************************************/

/* 事例三(lua脚本调用c++程序函数) */

/*这个在游戏中还是比较常用的,游戏世界中一些写好的接口可以供lua脚本调用*/

/************************************************************************/

#include <iostream>
#include "lua.hpp"
using namespace std;
/* 在这种结构中保持状态的所有信息。*/
lua_State* L;
int swap(lua_State *L)
{
/* 取出参数个数 */
int n = lua_gettop(L);
int x,y,nMin,nMax;
if ( n != 2)
{
return 0;
}
/*  取出两个参数*/
x = lua_tonumber(L,1);
y = lua_tonumber(L,2);
nMin = x < y?x:y;
nMax = x < y?y:x;
/* 压栈 实际就是返回值 */
lua_pushnumber(L,nMin);
lua_pushnumber(L,nMax);
/*   返回值个数*/
return 2;
}
 
int main ( int argc, char *argv[] )
{
    /* 初始化lua*/
    L = lua_open();
    /* 加载 lua libraries */
    luaL_openlibs(L);
/*注册函数*/
lua_register(L, "swap", swap);
    /* 调用脚本 */
    luaL_dofile(L, "swapforc.lua");
    /* 销毁所有lua state中的对象 */
    lua_close(L);
    return 0;
}


swapforc.lua



minnum,maxnum =  swap(20,50)
print("minnum:"..minnum.."maxnum:"..maxnum)





源码:http://download.csdn.net/detail/cyteven/6306875
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: