c++和lua交互

来源:互联网 发布:dts音效软件怎么下载 编辑:程序博客网 时间:2024/05/29 23:24

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 thenprint("lua printx"..x)return xelseprint("lua printy"..y)return yendend

 

 

事例三(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

原创粉丝点击