首页 > 代码库 > Lua与C++相互调用
Lua与C++相互调用
{--1、环境--}
为了快速入手,使用了小巧快速的vc++6.0编译器
以及在官网下载了Lua安装包..官网地址{--http://10.21.210.18/seeyon/index.jsp--}
两者都安装好后,即可进行
{--2、工程以及配置--}
1、首先用vc++6.0创建一个简单的win32 console application
2、从Lua的安装目录下复制include和lib两个目录下的文件到刚刚创建的工程的目录下。
{include:包含了lua的.h头文件}
{lib:包含了lua的动态链接库dll}
3、为了使vc++6.0编译和链接时能找到所需的Lua文件
{在工程下添加刚刚复制过来的所有.h文件,保证编译通过}
{在编译器里面设置dll{工程-设置-对象/库模块 那一行的最后添加 lua5.1.lib lua51.lib,保证链接时通过}}
{--3、C++与Lua相互调用例子--}
要调用Lua,首先我们得写一个简单的Lua文件,并把该文件保存到一个路径下,这里比如路径是{F:\\Lua}
function add(x, y) n1, n2 = clib();//关于clib()是一个C函数,稍后会介绍到。 print("The first arg"..n1); print("The second arg"..n2); return x + yend
该函数用于计算从C函数传递过来的的两个参数x,y的和。
另外为了方便,这函数里面同时也演示了如何调用Lua如何调用C函数clib()
接下来我们开始编写主函数
#include<stdlib.h>// 这是个C++程序, 所以要extern "C",// 因为lua的头文件都是C格式的extern "C" {#include "lua.h"#include "lualib.h"#include "lauxlib.h"}lua_State* L; /* the Lua interpreter *///给lua调用的c函数必须定义成static int XXX(lua_State *L) static int clib(lua_State *L) { lua_pushnumber(L, 100); lua_pushnumber(L, 200); return 2;
//lua调用该函数将从栈中,取2个结果 }
//此处C++调用了Lua函数int luaadd (int x, int y){ int sum; /* the function name */ lua_getglobal(L, "add");
/* the first argument */ lua_pushnumber(L, x);
/* the second argument */ lua_pushnumber(L, y);
/* call the function with 2 arguments, return 1 result */ //说明调用的函数是带有2个参数和1个返回值 lua_call(L, 2, 1); /* get the result */ sum = (int)lua_tonumber(L, -1); lua_pop(L, 1); return sum;}int main(int argc, char* argv[]){ int sum; /* initialize Lua */ L = luaL_newstate();//创建一个指向lua解释器的指针 /* load Lua base libraries */ luaL_openlibs(L); lua_register(L, "clib", clib);
/* load the script */ /*Lcc.lua是这个C++程序调用的Lua文件, 注意luaL_dofile()函数的第二个参数要写绝对路径,否则执行后会提示 “unprotected error in call to lua api(attampt to call a nil value)”错误 */ luaL_dofile(L, "F:\\lua\\Lcc.lua"); /* call the add function */ sum = luaadd(10, 15); /* print the result */ printf( "The sum is %d\n", sum ); /* cleanup Lua */ lua_close(L); system("pause"); return 0;}
以上的clib()函数就是Lua文件里面要调用的函数
关键代码:lua_register(L, "clib", clib);将函数注册到Lua栈中,使得Lua可以调用到。
而C++如何调用Lua
关键代码:luaL_dofile()以及luaadd()函数
-------------------------------------------------------------------------------------
By Alwaystiys..
From 2014.09.05
At Gz.
Lua与C++相互调用