VC6.0配置LUA编译环境及LUA调用C++函数的简单示例
|
在http://www.lua.org,下载了lua 5.13源代码下来,一共有四个目录:doc | src | test | etc ;然后按网上的教程用VC6来编译出LUA的编译器和解释器(已经成功编译出两个lib,core.lib、standard.lib):
第一步:编译出两个lib core.lib:新建静态连接库,把src中的lapi.c、lcode.c、ldebug.c、 ldo.c、 ldump.c 、lfunc.c 、lgc.c、 llex.c 、lmem.c 、lobject.c 、lopcodes.c、 lparser.c、 lstate.c 、lstring.c、ltable.c、ltests.c 、ltm.c、 lundump.c、 lvm.c、 lzio.c添加到静态连接库后编译出core.lib standrad.lib:新建静态连接库,把src中的lauxlib.c、 lbaselib.c 、ldblib.c 、liolib.c 、lmathlib.c、 ltablib.c、lstrlib.c、 loadlib.c、linit.c和loslib.c添加到静态连接库后编译出standrad.lib
第二步: 编译解释器为了编译解释器,我们需要建立一个win32控制台程序,然后加入文件lua.c, 并且链接到上面我们建立的lib文件,将include 路径设置到../include/下,输出路径设置到../bin/下
第三步: 编译编译器编译器与解释器的步骤基本相同,只不过我们需要加入其luac.c print.c lopcodes.c ,并且定义LUA_OPNAMES 简单示例:
#include "windows.h"
extern "C"{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
/* 下面包含的是自己编译出来的LIB文件 */
#pragma comment(lib,"core.lib")
#pragma comment(lib,"standard.lib")
/* 全局变量 */
lua_State *L;
/* LUA调用的函数必须是全局函数,
返回值一定要int,另外参数一
定要带有lua_State * */
static int test(lua_State *L)
{
/* 判断是否数字 */
if (!lua_isnumber(L,1))
{ lua_pushstring(L,"warning first isn't number");
lua_error(L);
return 0;
}
/* 判断是否数字 */
if (!lua_isnumber(L,2))
{
lua_pushstring(L,"warning second isn't number");
lua_error(L);
return 0;
}
/* 读取第一个参数 */
int x=lua_tonumber(L,1);
/* 读取第二个参数 */
int y=lua_tonumber(L,2);
cout<<"x+y="<<x+y<<endl;
return 2;
}
int main(int argc, char* argv[])
{
/* 初始化LUA */
L=lua_open();
/* 打开LUA库文件*/
luaL_openlibs(L);
/* 注册LUA函数 */
lua_register(L,"test",test);
/* 执行LUA文件 */
luaL_dofile(L,"debug\\test.lua");
/* 关闭LUA */
lua_close(L);
printf( "Press enter to exit!" );
getchar();
return 0;
}