c调用lua...
时间:2010-08-09 来源:taobao755624068
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