c++调用lua例子

c++调用lua例子

 

http://blog.csdn.net/bhwst/archive/2010/07/29/5774746.aspx

 

VC要编译LUA文件必须先配置VC编程环境。。我用的是VC6.0,lua 5.1.4版

首先将lua的"lua.h" ,"lualib.h", "lauxlib.h" 这三个放在vc程序include文件夹下

然后将lua的lua5.1.lib放在lib文件夹下就OK了

下面看看我写的一个小例子:

a.cpp

view plaincopy to clipboardprint?

#include "windows.h"

extern "C"{

#include "lua.h"

#include "lualib.h"

#include "lauxlib.h"

}

#pragma comment(lib,"lua5.1.lib")

lua_State * L;

static int clib(lua_State *L) //给lua调用的c函数必须定义成static int XXX(lua_State *L)

{

char path[MAX_PATH];

GetCurrentDirectory(MAX_PATH,path);

lua_pushstring(L,path);

return 1; //为什么要返回1?这是有依据的,该函数把结果压入了栈,lua调用该函数将从栈中

//取1个结果

}

int main ( int argc, char *argv[] )

{

int sum;

//创建一个指向lua解释器的指针

L = luaL_newstate();

//加载lua标准库

luaL_openlibs(L);

//注册C++函数

lua_register(L,"clib",clib);

//加载脚本

luaL_dofile(L,"4.lua");

//调用函数

lua_getglobal(L,"run");

//运行函数并把结果压入栈

lua_pcall(L,0,0,0);

//关闭并释放资源

lua_close(L);

return 0;

}

#include "windows.h"

extern "C"{

#include "lua.h"

#include "lualib.h"

#include "lauxlib.h"

}

#pragma comment(lib,"lua5.1.lib")

lua_State * L;

static int clib(lua_State *L) //给lua调用的c函数必须定义成static int XXX(lua_State *L)

{

char path[MAX_PATH];

GetCurrentDirectory(MAX_PATH,path);

lua_pushstring(L,path);

return 1; //为什么要返回1?这是有依据的,该函数把结果压入了栈,lua调用该函数将从栈中

//取1个结果

}

int main ( int argc, char *argv[] )

{

int sum;

//创建一个指向lua解释器的指针

L = luaL_newstate();

//加载lua标准库

luaL_openlibs(L);

//注册C++函数

lua_register(L,"clib",clib);

//加载脚本

luaL_dofile(L,"4.lua");

//调用函数

lua_getglobal(L,"run");

//运行函数并把结果压入栈

lua_pcall(L,0,0,0);

//关闭并释放资源

lua_close(L);

return 0;

}

4.lua文件

view plaincopy to clipboardprint?

function run()

print("call running from c")

print(clib())

end

function run()

print("call running from c")

print(clib())

end

这个例子实现了C与lua的相互调用。。另外,还可以把我前面一篇lua调用C dll的内容整合在一起。。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/bhwst/archive/2010/07/29/5774746.aspx

你可能感兴趣的:(c++调用lua例子)